Две версии одной и той же библиотеки в разных проектах

enter image description here

У меня есть решение с несколькими проектами. Существует необходимость в том, чтобы мне пришлось ссылаться на другую версию той же сборки в двух разных проектах. В настоящее время происходит то, что только последняя версия dll копируется в папку bin. Таким образом, dll, зависящий от более старой версии, выходит из строя с ошибкой

Could not load file or assembly xxxx or one of its dependencies.
The located assembly manifest definition does not match the 
assembly reference.

Есть ли способ заставить приложение использовать определенную версию dll на основе проекта?

Ответ 1

Да, вы можете иметь ссылку на каждый проект конкретной версии той же DLL. Я бы предложил разместить обе версии DLL в GAC. В ваших проектах-ссылках задано значение Копировать локальное = false и Specific Version = true.

Вы можете сделать это без GAC, используя свой файл конфигурации и директивы привязки сборки (так как общие DLL не могут быть в одном и том же потому что они имеют одно и то же имя), но это одна из основных проблем, которые GAC был разработан для решения. Поэтому я бы рекомендовал воспользоваться им.

Ответ 2

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

Например, если ваш проект является веб-приложением:

MyWebApplication
    - DLL reference to MyLibrary v1.0
    - Only have internal references which use v1.0 of the library
    - WCF proxy to http://localhost/MyWebService

MyWebService
    - DLL reference to MyLibrary v2.0
    - Only have internal references which use v2.0 of the library