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