Я создаю библиотеку с некоторым функционалом с именем CompanyName.SDK
, который должен быть интегрирован в проект компании CompanyName.SomeSolution
CompanyName.SDK.dll
должен быть развернут через пакет NuGet.
Пакет CompanyName.SDK
имеет зависимость от сторонних пакетов NuGet. Например, допустим Unity
. Текущая зависимость находится на v3.5.1405-prerelease
Unity
.
CompanyName.SomeSolution.Project1
зависит от Unity
v2.1.505.2
.
CompanyName.SomeSolution.Project2
зависит от Unity
v3.0.1304.1
.
Интеграция CompanyName.SDK
в это решение добавляет зависимость от Unity
v3.5.1405-prerelease
.
Пусть возьмем, что CompanyName.SomeSolution
имеет один runnable выходной проект CompanyName.SomeSolution.Application
, который зависит от двух выше и от CompanyName.SDK
И здесь начинаются проблемы. Все сборки Unity
имеют одинаковые имена во всех пакетах без спецификатора спецификации. И в целевой папке это будет только одна версия Unity
сборок: v3.5.1405-prerelease
через bindingRedirect
в app.config
.
Как код в Project1
, Project2
и SDK
использует точно необходимые версии зависимых пакетов, которые они были закодированы, скомпилированы и протестированы с помощью <
ПРИМЕЧАНИЕ 1: Unity
- просто пример, реальная ситуация в 10 раз хуже с модулями 3rdparty, зависящими от других модулей 3rdparty, которые в свою очередь имеют 3-4 версии одновременно.
ПРИМЕЧАНИЕ 2. Я не могу обновить все пакеты до их последних версий, потому что есть пакеты, у которых есть зависимость не последней версии других пакетов.
ПРИМЕЧАНИЕ 3. Предположим, что у зависимых пакетов есть изменения в изменении между версиями. Это реальная проблема, почему я задаю этот вопрос.
ПРИМЕЧАНИЕ 4: Я знаю о вопросе о конфликтах между разными версиями одной и той же зависимой сборки, но ответы там не решают корень проблемы - они просто скрывают ее.
ПРИМЕЧАНИЕ 5. Где, черт возьми, это обещанное решение "DLL Hell"? Он просто появляется с другой позиции.
ПРИМЕЧАНИЕ 6. Если вы считаете, что использование GAC каким-то образом является вариантом, напишите пошаговое руководство или дайте мне ссылку.