Загрузка нескольких версий одной и той же сборки

Я работаю с сторонней сборкой, и, к сожалению, теперь мне нужно загрузить свою последнюю и предыдущую версию в мой проект, поэтому во время выполнения я могу решить, какой из них загрузить. Мне нужен только один, не тот, и другой.

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

Будет ли процесс кодироваться с одной версией компонента, а затем во время выполнения (с использованием AppDomain ) swap в правильной DLL, которую я хочу использовать? Значит, я бы справился с этим при запуске?

Если обе сборки совместимы, вы можете определить в файле app.exe.config или web.config, чтобы всегда использовать новую версию, объявив bindingRedirect.

пример

           

эта запись конфигурации для dotnet 1.0 сообщает загрузчику asembly всегда использовать версию 1.0.3300.0 независимо от того, что скомпилировано в вызывающий exe. То же самое возможно с более новыми версиями dotnet

Вот пара сообщений отсюда на SO, которые описывают, как загружать несколько версий одной и той же сборки:

В этом сообщении описывается, как ссылаться на две разные версии log4net. См. Комментарий @Joe B. в соответствии с принятым ответом для более подробной информации о том, как он решил свою проблему.

Сторонние библиотеки относятся к различным версиям log4net.dll

Этот ответ относится к этой ссылке:

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

Внутри этого streamа есть предостережение о загрузке разных версий одной и той же сборки в том же контексте и ссылки на эту ссылку в MSDN:

http://msdn.microsoft.com/en-us/library/dd153782.aspx#avoid_loading_multiple_versions

Вот еще один ответ, который предлагает использовать AssemblyResolve: Reference две равные сборки, только открытые ключи различаются

Если у вас есть две разные версии одного и того же компонента, это означает, что обе версии могут отличаться не только от реализации, но и от количества операций, которые они выставляют? Если это так, как вы можете переключать версии, если какая-то функциональность есть только в одной из двух версий?

В любом случае, если вы хотите загрузить две версии, вам нужно будет сделать это в двух отдельных доменах приложений, потому что тогда вы можете выгрузить тот, который вам не понадобится впоследствии. Затем вы можете выполнить свою логику в правильном домене приложения, как описано в разделе Как создать домен приложения и запустить в нем мое приложение? ,

Здесь есть запись в блоге с решением, также см. Этот stream SO Загрузка различных версий одной и той же сборки

  • Поиск всех пространств имен в сборке с использованием Reflection (DotNET)
  • Сколько циклов процессора требуется для каждой инструкции сборки?
  • Определить версию сборки (CLR) сборки
  • Почему XCHG reg, reg 3 инструкции по микрооперации на современных архитектурах Intel?
  • Как объединить несколько сборок в один?
  • Есть ли альтернатива Maven или порт для мира .NET?
  • Примеры предварительной выборки?
  • Как я могу перечислить все загруженные сборки?
  • как загрузить все сборки из вашего каталога / bin
  • Как сохранить сборки ASP.NET в AppDomain в живых?
  • Проверьте, равен ли регистр нулю с помощью CMP reg, 0 против OR reg, reg?
  • Давайте будем гением компьютера.