2013-06-07 2 views
4

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

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

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

+0

Я столкнулся с этой ситуацией раньше - это был типичный огромный корпоративный монстра с огромным количеством проектов. В какой-то момент кто-то добавил проект с гораздо более новой версией log4Net, который был необходим для него, и он сломал все. Решение в то время (к которому я, к счастью, не принимал участия) заключалось в том, чтобы изменить код по мере необходимости, чтобы иметь возможность ссылаться на все проекты той же самой новой версии log4Net. Мне бы хотелось увидеть хорошее решение для такого рода вопросов, кроме «установить его в GAC и ссылаться на вашу конкретную версию». – Gjeltema

+0

Ханс, вы можете уточнить свой комментарий? Я не знаю, где мой вопрос подразумевает, что система не нуждается в техническом обслуживании или что проект когда-либо сделан. –

+1

@HansPassant Я тоже смущен - планировали ли вы написать ответ на другой вопрос? Этот вопрос кажется неуместным. – Gjeltema

ответ

3

Вы можете использовать extern alias:

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

Вот Extern alias walkthrough.

+2

Это было бы очень полезно для моей группы, чтобы узнать об этом несколько лет назад. – Gjeltema

0

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