Каким-то образом мне повезло и мне никогда не приходилось справляться с этой проблемой, хотя я считаю ее общей:
У меня есть веб-проект, позвоните ему 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, но я не уверен точно, как бы я это сделал, и как это повлияет на других разработчиков и серверов.
Любые предложения, которые у вас могут быть оценены.
Спасибо за помощь.