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

Я разрабатываю небольшую библиотеку, которая будет использоваться в нескольких приложениях. Я хотел бы использовать некоторые сторонние библиотеки в моей собственной библиотеке (например, log4Net, Entity Framework и т. Д.). Я могу представить, что могу либо развернуть библиотеки DLL вместе со своей собственной библиотекой, либо использовать ILMerge для создания единственной библиотеки DLL (я мало знаю о ILMerge, никогда не пробовал его).

Меня беспокоит, что произойдет, если приложения, которые потребляют мою библиотеку, также будут использовать те же сторонние библиотеки, которые я буду использовать. Например, если я использую log4Net версии 1.2, а приложение-потребитель использует log4Net версии 1.0, я получу какой-либо конфликт или не загрузится только одна версия сборки?

Предотвращает ли это ILMerge? Как это обычно решается при разработке библиотеки со сторонними зависимостями?


person Phil Sandler    schedule 07.06.2013    source источник
comment
Я сталкивался с этой ситуацией раньше - это было типичное огромное корпоративное чудовище с огромным количеством проектов. В какой-то момент кто-то добавил проект с гораздо более новой версией log4Net, которая была необходима для него, и он все сломал. В то время решение (в котором я, к счастью, не участвовал) заключалось в изменении кода по мере необходимости, чтобы все проекты ссылались на одну и ту же новую версию log4Net. Я бы хотел увидеть хорошее решение для такого рода проблем, помимо установки его в GAC и ссылки на вашу конкретную версию.   -  person Gjeltema    schedule 08.06.2013
comment
Ганс, не могли бы вы пояснить свой комментарий? Я не знаю, откуда из моего вопроса следует, что система не нуждается в обслуживании или что проект когда-либо завершен.   -  person Phil Sandler    schedule 08.06.2013
comment
@HansPassant Я тоже в замешательстве - вы собирались написать ответ на другой вопрос? Это кажется неуместным с этим вопросом.   -  person Gjeltema    schedule 08.06.2013


Ответы (2)


Вы можете использовать внешний псевдоним:

Возможно, вам придется сослаться на две версии сборок с одинаковыми полными именами типов. Например, вам может потребоваться использовать две или более версий сборки в одном приложении. Используя псевдоним внешней сборки, пространства имен из каждой сборки могут быть заключены в пространства имен корневого уровня, названные псевдонимом, что позволяет использовать их в одном файле.

Вот пошаговое руководство по использованию псевдонима Extern.

person Alex Filipovici    schedule 07.06.2013
comment
Моей группе было бы действительно полезно узнать об этом несколько лет назад. - person Gjeltema; 09.06.2013

Лучше всего развернуть его вместе с вашим приложением. NuGet очень хорошо управляет такими зависимостями. Если у вас нет какой-либо конкретной причины использовать ILMerge, это только усложнит вам жизнь - возможно, вы захотите, например, обновиться.

person Simon Halsey    schedule 07.06.2013