C # Как перенаправить загрузку сборки с помощью файла конфигурации приложения - PullRequest
3 голосов
/ 31 мая 2010

У меня есть сборка с несколькими версиями, зарегистрированными в GAC. Теперь я хочу, чтобы один из моих клиентов, использующий эту сборку (версия 1.3), указывал на новейшую версию (1.4), не открывая исходный код и не перекомпилируя клиент.
Я видел статью, демонстрирующую технику для этого с помощью файла конфигурации приложения (приложение winform)

вот содержимое файла конфигурации:

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:asm="urn:schemas-microsoft-com:asm.v1">
<runtime>
<asm:assemblyBinding>
  <!-- one dependentAssembly per unique assembly name -->
  <asm:dependentAssembly>
    <asm:assemblyIdentity
       name="MyFacade"
       publicKeyToken="c9c18e16df1654e0" />
    <!-- one bindingRedirect per redirection -->
    <asm:bindingRedirect oldVersion="1.3.0.0"
                  newVersion="1.4.0.0" />
  </asm:dependentAssembly>
</asm:assemblyBinding>
</runtime>
</configuration>

Как видите, существует перенаправление привязки с версии 1.3.0.0 на 1.4.0.0 для сборки с именем MyFacade.

Теперь, есть только небольшая проблема с этим подходом. Это не работает :)

Я уверен, что это что-то с моим кодом.

Есть предложения?

Спасибо
Ади Барда

1 Ответ

3 голосов
/ 31 мая 2010

сначала это лучший источник Я нашел об этом предмете. Существуют некоторые различия, например, они не используют пространство имен asm:, а также вы можете отключить политику издателя, добавив <publisherPolicy apply="no" />, как описано в статье.

В предыдущем проекте, который мы делали, нам нужно было еще больше контроля, поэтому нам нужно было перехватить AppDomain.AssemblyResolve Event и направить к любой сборке, которую мы хотели. Здесь вы можете найти больше информации о концепции. Однако вам придется один раз манипулировать вашим приложением.

...