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