Как справиться с зависимостями от нескольких версий одной и той же библиотеки DLL в Visual Studio?

например: у меня есть приложение A, которое ссылается на библиотеку A и библиотеку B. Кроме того, сама библиотека A ссылается на другую версию библиотеки B (все они на C#)

Я хочу, чтобы все ссылки указывали на двоичный файл DLL. сейчас у меня есть такая папка lib:

lib/LibA/v1/LibA_1.dll
lib/LibB/v1/LibB_1.dll
lib/LibB/v2/LibB_2.dll

скажем, приложение ссылается на LibA v1 и LibB v2, но сама LibA зависит от LibB v1. какой "правильный" способ настроить это, если это вообще возможно? Я хотел бы избежать GAC и свести к минимуму ручную работу с файлами, потому что идея состоит в том, что разработчик сможет проверить приложение A из svn и построить его без изменений путей/ссылок, предполагая, что у них есть дерево папок lib проверено.

прямо сейчас я замечаю, что Visual Studio не копирует версию LibB LibA в выходной каталог. достаточно ли разницы в имени файла или нужно менять версию в самой сборке?


person toasteroven    schedule 19.10.2009    source источник


Ответы (1)


Правильный способ сделать это — использовать ILMerge. Когда вы компилируете LibA_1, используйте ILMerge для статического слияния LibB_1 с dll-файлом LibA_1. После этого ваше приложение будет ссылаться на LibA_1 и LibB_2, и вам будет неважно, что LibA_1 на самом деле имеет LibB_1, встроенную в свой dll-файл. Я использовал этот подход раньше, и он работал довольно хорошо.

Это действительно единственный вариант, который у вас есть, если вы не готовы обновить LibA_1 для использования LibB_2. Если LibB_1 и LibB_2 существенно различаются, обновление LibA_1 может занять много времени.

person Brian Gideon    schedule 20.10.2009