Популярные библиотеки с открытым исходным кодом и конфликты ссылок - PullRequest
8 голосов
/ 18 ноября 2011

Мы используем log4net во всех наших (многих) внутренних приложениях. Обычно мы делаем то, что составляет развертывание xcopy. Для удобства разработчиков мы скомпилировали исходный код log4net в одну из наших основных библиотек.

Это сейчас возвращается, чтобы укусить нас. Другие библиотеки с открытым исходным кодом (такие как Topshelf ) ссылаются на log4net. Третьи (например, NServiceBus ) объединяют log4net со своими сборками. Обычно версии отличаются.

Это общий вопрос; конкретные библиотеки - только примеры.

Есть несколько похожих вопросов:

Из различных решений (GAC, AssemblyBinding, bindingRedirect и т. Д.), Что может причинить нам наименьшую боль в будущем? Мы можем изменить нашу основную библиотеку; мы просто не можем сделать ничего, что сломало бы существующую развернутую версию в полевых условиях. Обновление всех ссылок на наши проекты будет болезненным, поэтому мы хотим сделать это только один раз.

Обновление: Текущая версия журнала ведения журнала Topshelf, поэтому это больше не проблема для этой платформы.

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

Одна малоизвестная / используемая функция, с которой я постоянно работаю с несколькими ссылками и помогаю легко их обновить, это Пути ссылок в сочетании с перенаправлениями привязки. Используя ссылочные пути, я могу поддерживать разделяемую библиотеку в отдельной библиотеке классов / пакете в контроле исходного кода, которая содержит зависимую библиотеку, которую мы используем.

Имея собственную копию файлов, контролируемую отдельно (часто необходимо включить файл .license в папку с общими библиотеками, если это платная библиотека), позволяет новым разработчикам быстро убедиться, что они имеют правильная версия установлена ​​на их компьютере, не вступая в конфликт с существующими библиотеками на вашем компьютере.

В этом подходе есть предостережение, и любые дополнительные ссылочные пути, которые вы добавляете, не хранятся в файле .csproj , а вместо этого .csproj.user . ,

Во многих готовых решениях по управлению исходным кодом, таких как Team Foundation Server или Vault; эти файлы по умолчанию не включены в процесс регистрации. Большинство поставщиков систем управления версиями, включая двух упомянутых выше, имеют возможность изменять контролируемые расширения файлов для каждого проекта, а также для всего мира.

Единственное другое предостережение - некоторые поставщики управления исходным кодом, такие как Vault, по умолчанию обрабатывают файлы .csproj и .csproj.user как двоичные файлы; опять же, это можно изменить, и они могут рассматриваться как XML в случае Vault, что позволяет выполнять слияния.

В Team Foundation Server они обрабатываются как готовые XML.

1 голос
/ 25 ноября 2011

В вашем случае я бы развернул мою DLL в GAC с политикой сборки Publisher

Сборка политики издателя - это сборка, которая настраивает политику, которая будет использоваться, когда .NETвремя выполнения привязывается к сборке.Таким образом, вы можете легко обновить весь ваш проект, указав в политике издателя, какая версия вашей DLL должна использоваться.

Пример политики сборки издателя:

<configuration> 
<runtime>
 <assemblyBinding xmlns=”urn:schemas-microsoft-com:asm.v1″>
  <dependentAssembly> 
   <assemblyIdentity name=”website” publicKeyToken=”18517ea673f8584b” culture=”neutral” />
   <bindingRedirect oldVersion=”1.0.0.0″ newVersion=”2.0.0.0″/> </dependentAssembly> 
</assemblyBinding> 
</runtime> 
</configuration>
0 голосов
/ 18 ноября 2011

Существует NServiceBus, который не объединяет сторонние сборки.

С страница загрузки :

Проблемы с объединенными сборками?

Чтобы уменьшить количество сборок, на которые разработчики должны ссылаться в своих проектах Visual Studio, NServiceBus объединяет несколько сторонних сборок в свои собственные сборки.Это может вызвать конфликты, если разработчики используют эти сторонние сборки в своем собственном коде, особенно при использовании версии, отличной от той, которая поставляется с NServiceBus.

Чтобы решить эту проблему, разработчики должны использовать сборки «только для ядра» NServiceBus.Для компаний, которые приобрели коммерческий пакет лицензий и поддержки NServiceBus, эти сборки можно найти в каталоге «только для ядра».

Если вы используете экспресс-издание, вам нужно выгрузить исходный код (см. Выше) и скомпилировать его самостоятельно, используя файл "UnsupportedBuildCoreOnly.bat".

...