У меня есть вспомогательный проект, который я использую во всех приложениях, которые я создаю. Он содержит некоторые методы расширения и набор общих вспомогательных классов, элементов управления и т. Д. Я время от времени обновляю / расширяю вспомогательный проект. Обычно это небольшие и несвязанные проекты, и я единственный человек, работающий над всеми из них.
Я попробовал два подхода для его использования
- добавлять файлы .cs напрямую (Добавить как ссылку) в каждый проект, где я их использую
- скомпилируйте его как .dll и добавьте в качестве ссылки
Я вижу некоторые преимущества и недостатки этих подходов.
Первый:
- Проще, потому что вспомогательные классы скомпилированы в exe-файл, поэтому я часто очень легко могу предоставить только один .exe-файл, который будет работать очень хорошо. Поскольку я добавляю как ссылку, я могу быть уверен, что всякий раз, когда я создаю какой-либо проект, который использует помощник, файлы помощника будут последней версией.
- еще проще, потому что я могу отделить файлы, так что на мои методы расширения, которые отлично работают в .NET 4.0, можно ссылаться отдельно от тех, которые требуют .NET 4.5, что означает, что приложение в целом может работать в .NET 4.0
- Позволяет отлаживать код, со всеми преимуществами точек останова и т. Д. И т. Д.
- не похоже на «лучшую практику»
Второй:
- кажется правильным подходом, но:
- требует, чтобы я доставил отдельный файл .dll, который по некоторым причинам гораздо сложнее для пользователей (они, как правило, делятся моими программами без .dll, которая затем вылетает при запуске)
- поскольку он скомпилирован в один .dll, ему потребуется самая высокая версия .NET - у многих из моих пользователей нет .NET 4.5, и это требуется только некоторым элементам моего вспомогательного класса, что означает, что я могу заставить некоторых людей обновить свои системы без причины
- Мне также нужно убедиться, что всякий раз, когда я обновляю любую из моих программ, я также доставляю файл .dll - хотя я не знаю, изменился ли он с последней версии или нет (это могло быть, но может также быть той же версией). Я не вижу простого способа определить это, не отслеживая версию сборки, что является дополнительной работой. На данный момент, когда я обновляю свои программы, я поставляю только обновленный exe, и мне нравится держать его маленьким и скромным.
Итак, какова реальная выгода от использования файла .dll здесь? Обратите внимание, что я единственный человек, который редактирует код всех приложений и вспомогательных файлов.
Кроме того, чтобы уточнить - приложений обычно очень мало, тогда как код, содержащийся во вспомогательных классах, является полностью общим для всех из них (некоторые простые сравнения строк, пути или операции XML и т. Д.)
На самом деле, кто-то заставил меня понять, что есть третий вариант. Поскольку у меня есть вспомогательный код в отдельном проекте, я могу добавить этот проект к решениям каждого из моих отдельных приложений - что работает как «Добавить как ссылку» для отдельных файлов, за исключением того, что я добавляю только один проект ... Но Как заметил Док Браун, это, по сути, означает, что .dll все равно нужно будет добавить в проект ...
Еще одна вещь, которая как бы не способствует использованию dll-файлов, это возможность активной отладки через вспомогательный класс ...