Использовать разные версии ссылочной библиотеки 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: не удалось загрузить файл или сборка ' SomeThirdParty , Version = 2.0.0.0, Culture = [etc.]' или одна из ее зависимостей. Определение манифеста обнаруженной сборки не соответствует ссылке на сборку.

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

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

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

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

10
задан Joe Enos 26 May 2011 в 01:00
поделиться