Определите метод расширения .NET с областью решения - PullRequest
6 голосов
/ 02 октября 2008

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

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

Можно ли определить расширение для работы над несколькими проектами внутри решения или обернуть их в dll «расширения», или они ограничены рамками проекта?

РЕДАКТИРОВАТЬ Хотя ответы «выделенного проекта» совершенно верны, я выбрал ответы Марксидада, поскольку предпочитаю подход, который он дает. Спасибо за все ответы до сих пор, и я изменил их все, так как все они были хорошими ответами

Ответы [ 5 ]

9 голосов
/ 02 октября 2008

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

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

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

2 голосов
/ 02 октября 2008

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

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

Скотт Дорман тоже прав в своем посте : если вы не хотите, чтобы они были изменены, вы можете скомпилировать их как библиотеку DLL, которую вы включаете в свои новые проекты (в отличие от включения некомпилированного проекта) .

1 голос
/ 02 октября 2008

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

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

0 голосов
/ 06 апреля 2013

Несколько ответов предполагают, что кто-то поместит функции расширения в общую сборку. Какой правильный ответ. Но для новичков есть странная вещь: 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 для пространства имен методов. После того, как вы это сделаете, ваш источник будет скомпилирован.

...