2016-05-19 8 views
2

В моем решении у меня есть несколько проектов, которые используют Log4Net (1.2 и 2.5).Можно ли ссылаться на другую версию той же сборки в один проект?

Тогда у меня есть проект, где я выполняю все модульные испытания (из других проектов). Поэтому я в ситуации, когда в зависимости от того, что я тестирую/макет, мне понадобится Log4Net 1.2 или 2.5.

Я читал, что вы можете поддерживать разную версию одной сборки в приложении (с использованием базы кода и т. Д.), Но возможно ли поддерживать другую версию единой сборки в проекте? Если да, то как?

РЕДАКТИРОВАТЬ:

Вот крошечный (2 класса, 2 методы, 2 Конструкторы) проект, показывающий мой вопрос:

https://srv-file1.gofile.io/download/EQFdOs/212.76.254.142/Log4NetMulti.zip

(я надеюсь, ссылка работы)

+0

Что вы читаете, когда вы * читали вы могли бы поддерживать различные версии одной сборки в приложении (используя кодовые и т.д.). *? – niksofteng

+0

Я сомневаюсь, что они будут определять те же пространства имен дважды. – AUsr19532

+0

@ AUsr19532 - и с какой проблемой вы это видите? Для нескольких сборок совершенно нормально иметь типы, которые существуют в одном и том же пространстве имен. –

ответ

3

Вы можете ссылки на другие версии той же DLL с использованием Alias, как объяснено здесь MSDN:

Добавьте ссылку на обе библиотеки DLL в решении клиентского приложения. Затем в обозревателе решений под ссылочным узлом выберите первую библиотеку классов (старая версия). В окне свойств измените псевдоним с глобального на oldVer. Сделайте аналогичные изменения после выбора новой библиотеки классов. Вы тогда хорошо ...

+0

VS даже не позволит мне добавить ссылку «Ссылка на ... не может быть добавлена. Ссылка на компонент ... уже существует в проекте. –

+0

Хорошо .. попробуйте переименовать имя dll, например 'log4netold.dll' и' log4netnew.dll' – Pikoh

+0

Лучше, я мог бы добавить две ссылки. Поэтому я использовал псевдоним для одного, а тот, который находится в глобальном псевдониме, не может быть найден, когда выполняется единичный тест (он компилирует, но тогда, тест с участием «global log4net» crashe). –

3

Благодаря советам Пико мне удалось заставить его работать. Но поскольку для этого требуется больше, чем просто использовать псевдоним и переименовать dll, я напишу весь процесс.

  1. Удалитьсуществующие ссылки (например: log4net.dll) из проекта
  2. Добавить папку в проект, чтобы сохранить несколько DLL (например:/Libs)
  3. Добавить несколько dll в нем и дать им уникальные имена файлов (например, log4net.1.2.10.0.dll, log4net.1.2.15.0.dll)
  4. Перейти к собственности на эти файлы и выберите «» Копия: Alwa YS "или" Copy: Копировать, если новее "
  5. Добавить ссылки к файлам
  6. Дайте эти ссылки уникального псевдонимов (например: log4net_1_2_10_0, log4net_1_2_15_0)
  7. В вас коде, использует алиасов, используя «extern alias».

    extern alias log4net_1_2_10_0;

    using log4net_1_2_10_0.log4net; с использованием System.Web; ...

  8. Добавить код базы данных в свой файл конфигурации.Это должно относиться к dll, который вы разместили в своей папке, с соответствующей версией и токеном.

    < выполнения > < assemblyBinding Xmlns = "урна: схемы-Microsoft-ком: asm.v1" > <dependentAssembly> < assemblyIdentity имя = "log4net" PublicKeyToken = "669e0ddf0bb1aa2a"/> < CodeBase версия = "1.2.15.0" HREF = "Libs/log4net.1.2.15.0.dll"/> </dependentAssembly > <dependentAssembly> < имя assemblyIdentity = "log4net" PublicKeyToken = "1b44e1d426115821"/> < CodeBase версия = "1.2.10.0" HREF = "Libs/log4net.1.2.10.0.dll"/> </dependentAssembly > </assemblyBinding > </выполнение >