Обновите эталонную DLL в проекте C # без перекомпиляции проекта - PullRequest
17 голосов
/ 22 сентября 2009

Мне нужно взять встроенную версию приложения C # и изменить одну из справочных библиотек DLL. Каков наилучший способ сделать это, у меня определенная версия отключена на эталонной dll, но как только я тестирую замену dll более новой версией, я получаю «Не удалось загрузить файл или сборку XXXXX, Version = XXXXX. Есть ли способ остановить загрузчик от заботы о версии DLL, так что DLL просто попытается загрузить?

1 Ответ

18 голосов
/ 22 сентября 2009

Да, вы можете сделать это - см. Статью MSDN Перенаправление версий сборки .

Вы должны прочитать весь документ, но это, по сути, включает либо издателя сборки, создающего «файл политики издателя», либо потребителя, добавляющего bindingRedirect в файл app.config, например, (скопировано непосредственно из статьи):

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Несколько заметок:

  • Если вы не указали явно ваша культура (как многие не делают), это будет быть "нейтральным", а не "en-us".

  • Если вы еще этого не знаете, вы можете получить токен открытого ключа сборки используя утилиту строгого имени, как это: sn -t [AssemblyPath]

...