Используйте разные версии ссылочной DLL - PullRequest
10 голосов
/ 26 мая 2011

Каким-то образом мне повезло, и мне никогда не приходилось сталкиваться с этой проблемой, хотя я думаю, что это обычная проблема:

У меня есть веб-проект, назовем его SomeProject. SomeProject имеет ссылку на стороннюю библиотеку, назовем ее SomeThirdParty, версия 1.0. SomeProject также имеет ссылку на доморощенную библиотеку классов, назовем ее SomeLibrary. SomeLibrary также имеет ссылку на SomeThirdParty, но имеет другую версию (скажем, 2.0).

Версия 1.0 и 2.0 SomeThirdParty используют большинство одинаковых сигнатур, но являются разными реализациями. Мне нужно SomeProject для использования реализации 1.0 и SomeLibrary для использования реализации 2.0, если это возможно.

Я компилирую SomeProject, используя его ссылку на log4net. DLL, которая попадает в каталог bin, является той, на которую ссылается SomeProject. Во время выполнения, когда выполняется код из SomeLibrary, он пытается выполнить код из версии 2.0 SomeThirdParty, и, конечно, не удается, выбрасывая FileLoadException: Could not load file or assembly ' SomeThirdParty , Version=2.0.0.0, Culture=[etc.]' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

Очевидно, я мог бы обновить SomeProject до более новой DLL или понизить SomeLibrary до более старой DLL, но это не было бы идеально по многим причинам.

Я думаю, что правильный ответ включает в себя установку SomeThirdParty в GAC, но я не совсем уверен, как мне поступить, и как это повлияет на других разработчиков и серверов.

Будем благодарны за любые ваши предложения.

Спасибо за помощь.

Ответы [ 2 ]

6 голосов
/ 26 мая 2011

Помещение обеих версий SomeThirdParty в GAC должно делать то, что вы хотите.Используйте утилиту gacutil или Пуск-> Выполнить-> Сборка, затем перетащите-n-drop.

3 голосов
/ 25 октября 2013

Из моего ответа ранее: https://stackoverflow.com/a/19576769/2367343

Я столкнулся с этим вчера для веб-разработчика Visual Studio, используя Oracle.DataAccess.dll.

Мое решение,

щелкните правой кнопкой мыши свой проект (* .csproj) и отредактируйте его.

Прямо под:

<PropertyGroup>

Place

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

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

Я сделал

ora11 >> Oracle.DataAccess.dll (Version 11)

ora9 >> Oracle.DataAccess.dll (Version 9)

Это позволяет вашей IDE использовать обе версии DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...