2008-10-02 3 views
6

У меня есть несколько методов расширения стиля «помощник», которые я использую довольно регулярно, теперь (они в основном довольно просты, интуитивно понятны и работают навсегда, а не на зло, поэтому, пожалуйста, не используйте это сходит в дискуссию вокруг того, следует ли мне их использовать). Они в основном расширяют основные классы .NET CLR.Определить метод расширения .NET с областью решения

В настоящее время мне нужно скопировать файл ExtensionMethods.cs, который содержит мои методы расширения для каждого нового проекта в рамках решения, чтобы иметь возможность использовать их в нескольких проектах.

Можно ли определить расширение для работы над несколькими проектами в рамках решения или обернуть их в DLL 'extensions' или они ограничены областью проекта?

EDIT Несмотря на то, что ответы на «выделенный проект» совершенно верны, я выбрал марксидад, поскольку я предпочитаю подход, который он дает. Спасибо за все ответы до сих пор, и я их полностью изменил, так как все они были хорошими ответами

ответ

9

Если вы не хотите, чтобы создать целый проект только для методов расширения, вы можете связать один и тот же файл на отдельные проекты без копирования файла:

  1. В обозревателе решений выберите целевой проект.
  2. Выберите меню «Проект».
  3. Выберите Добавить существующий элемент.
  4. В диалоговом окне «Добавить существующий элемент» выберите элемент, который вы хотите связать.
  5. В раскрывающемся списке «Открыть» выберите «Добавить как ссылку».
+0

Я делаю это тоже годами, избавляю меня от многих проблем, связанных с использованием общей сборки – faulty 2008-10-02 04:19:22

5

Лучший подход состоит в том, чтобы поместить их все в один проект и создать DLL. Затем вы можете включить этот проект в качестве ссылки на проект или включить DLL в качестве бинарной ссылки (вероятно, лучший выбор).

+0

Если вы хотите использовать функции расширения из нескольких проектов в рамках одного и того же решения **, то _why_ вы советуете двоичную ссылку? В этом случае вы должны использовать ссылку на проект. И в этом также используется прецедентное дело: «каждый новый проект в рамках решения». – 2013-04-05 21:29:29

2

Вы можете разместить свои расширения в отдельном проекте и включить этот проект в каждое новое решение, которое вы создаете.

Просто будьте осторожны с версией, например, когда другие приложения пытаются внести изменения в ваш проект расширения, тогда все проекты, которые используют этот метод, должны быть повторно протестированы.

Scott Dorman is correct in his post too: Если вы не хотите, чтобы они были изменены, вы можете скомпилировать их как библиотеку DLL, которую вы включаете в свои новые проекты (в отличие от включения несвязанного проекта).

1

Создайте проект для расширений платформы .NET и укажите этот проект в каждом из ваших проектов приложений. Само собой разумеется: все и вся платформа, и только материал для платформы, входит в один проект; приложение приложения входит в ваши проекты приложений.

Вы также можете посмотреть в библиотеках различных платформ, таких как Umbrella, которые предлагают комплекты расширений базовой платформы.

0

Несколько ответов показывают, что кто-то поставил бы функции расширения в общую сборку. Это правильный ответ. Но для новичков есть странная вещь: IntelliSense не мог справиться достаточно хорошо. Предположим, я расширил функцию ObservableCollection с помощью функции/метода ReplaceRange. После перемещения класс функций расширения, сначала компилятор скажет error CS1061: 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' does not contain a definition for 'ReplaceRange' and no extension method 'ReplaceRange' accepting a first argument of type 'System.Collections.ObjectModel.ObservableCollection<WhateverDto>' could be found (are you missing a using directive or an assembly reference?) Если вы затем наведите курсор на проблемный вызов ReplaceRange, вы не получите предложение о включении правильной инструкции использования автоматически. Кто-то может подумать, что он сделал что-то не так. Однако нет ничего, вам просто нужно знать, где ваш метод расширения, и вам нужно вручную ввести оператор using для пространства имен методов. Получив это право, ваш источник будет компилироваться.

Смежные вопросы