Объединение отдельных библиотек DLL в одну сборку для распространения с открытым исходным кодом - PullRequest
3 голосов
/ 14 февраля 2012

Я написал библиотеку, которую собираюсь опубликовать с открытым исходным кодом.Он использует MS Unity.Должен ли я объединить DLL-библиотеки Unity (Microsoft.Practices.Unity.dll & Microsoft.Practices.ServiceLocation.dll) в библиотеку ОС с помощью ILMerge, следует ли просто отправлять библиотеки DLL вместе с библиотекой ОС или нет?

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Я бы не стал объединять lib и MS Unity.

Поскольку MS Unity находится под лицензией Ms-PL, я бы поставил хорошую версию сборок MS Unity вместе с lib.Не забудьте включить readme.txt файл с лицензией MS Unity .

1 голос
/ 14 февраля 2012

Я бы не советовал вам объединять любые сторонние библиотеки в свою.Причина проста: делая это, вы ограничиваете своих пользователей от использования других (или, возможно, пользовательских) версий этих сторонних библиотек.

Я бы порекомендовал поставлять эти DLL вместе с вашими библиотеками, если включен пакет NuGetссылка на решение (если это библиотека с открытым исходным кодом).Это рекомендуется для любых сторонних библиотек, но для таких вещей, как контейнеры IoC, регистраторы и другие часто используемые проблемы, вы обычно хотите предоставить пользователям больше гибкости.

Если предполагается, что ваша библиотека будет использоваться многими, тоВы можете предсказать, что кто-то предпочтет использовать другой контейнер. Возможно, эти другие контейнеры уже используются в их приложениях, когда они хотят начать использовать вашу библиотеку.Трудно представить, что ваши пользователи будут рады отказаться от того, что они используют, и вместо этого начнут использовать Unity или поддерживать два контейнера.Я бы порекомендовал вам абстрагировать эти зависимости и дать вашим потенциальным пользователям выбор.

Например, в вашей библиотеке вы можете определить интерфейс IContainer со всеми методами, которые нужны вашей библиотеке из контейнера (Resolve, Register,так далее).Вы также можете реализовать другую отдельную DLL: SuperLibrary.Container.Unity.dll , которая будет содержать реализацию IContainer, которая работает через Unity.Теперь, если я захочу использовать Autofac в своем проекте вместе с вашей библиотекой, я смогу создать свой собственный файл SuperLibrary.Container.Autofac.dll, который, возможно, будет содержать один или два файла для вашей реализации IContainer, и я буду счастливым пользователем.вашей библиотеки, потому что я использую свой Autofac и мне не нужно ничего знать о каком-либо Unity:)

Или даже вы, если вы решите быть достаточно милым, вы можете отправить отдельные dll для Autofac, Unity, Unity2, StructureMap, Spring.NET и т. Д., Чтобы сделать своих пользователей счастливыми, предоставив им выбор какой библиотеки использовать.

0 голосов
/ 14 февраля 2012

Предлагаю написать инструкцию, как получить именно версию Unity с помощью диспетчера пакетов NuGet. Это должно уменьшить головную боль конечных пользователей.

Также предоставьте ссылку на страницу загрузки Unity с указанием списка совместимых версий Unity.

...