Использовать разные версии ссылочной DLL

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

У меня есть веб-проект, позвоните ему 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 manifest definition does not match the assembly reference.

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

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

Любые предложения, которые у вас могут быть оценены.

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

Ответ 1

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

Ответ 2

Из моего ответа ранее: fooobar.com/info/521018/...

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

Мое решение,

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

Прямо снизу:

<PropertyGroup>

Место

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

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

Я сделал

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

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

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