Переадресация не работает в тестовом проекте - PullRequest
6 голосов
/ 28 июля 2010

При применении перенаправления привязки в app.config тестового проекта. Среда выполнения отказывается подчиняться команде перенаправления и продолжает поиск старой версии сборки

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Msdcc.Common" publicKeyToken="9d9c15280f7f1425"/>
      <bindingRedirect oldVersion="0.0.0.0-2.4.0.0" newVersion="2.4.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Хорошо, я слышал о проблемах, возникающих в пространстве имен по умолчанию (от очень мудрого человека), поэтому я добавил "xmlns =" ​​urn: schemas-microsoft-com: asm.v1 ". Пробовал запускать тестовый кейс все равно не ходил. Открыл Fusion Log Viewer, проверил проблему и удивился, пока не искал старую dll. Действительно полезное сообщение, данное ниже, было расшифровано с помощью этого поста. http://msdn.microsoft.com/en-us/magazine/dd727509.aspx

*** Assembly Binder Log Entry  (28/07/2010 @ 18:59:36) ***

The operation failed.
Bind result: hr = 0x80131040. No description available.

Assembly manager loaded from:  C:\WINNT\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = BELGACOM\id820374
LOG: DisplayName = Msdcc.Common, Version=2.2.0.0, Culture=neutral, PublicKeyToken=9d9c15280f7f1425
 (Fully-specified)
LOG: Appbase = file:///c:/data/source/explorev1/explore.root/explore/euc.explore.domainobjectstest/bin/debug
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = NULL
Calling assembly : (Unknown).
===
LOG: This is an inspection only bind.
LOG: Using application configuration file: c:\data\source\explorev1\explore.root\explore\euc.explore.domainobjectstest\bin\debug\euc.explore.domainobjectstest.dll.config
LOG: Using machine configuration file from C:\WINNT\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///c:/data/source/explorev1/explore.root/explore/euc.explore.domainobjectstest/bin/debug/Msdcc.Common.DLL.
LOG: Assembly download was successful. Attempting setup of file: c:\data\source\explorev1\explore.root\explore\euc.explore.domainobjectstest\bin\debug\Msdcc.Common.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Msdcc.Common, Version=2.4.0.0, Culture=neutral, PublicKeyToken=9d9c15280f7f1425
WRN: Comparing the assembly name resulted in the mismatch: Minor Version
ERR: The assembly reference did not match the assembly definition found.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Мой Хотя Процесс

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

Настолько, что я новичок, я просто решил, что сделаю именно то, что сказал мне старик, и удалил объявление пространства имен из элемента конфигурации, и эй до того, как это сработало. xmlns = "http://schemas.microsoft.com/.NetConfiguration/v2.0"

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

1 Ответ

3 голосов
/ 13 июня 2012

Загрузка сборки в контекст загрузки Reflection по проекту игнорирует политику издателя и политику перенаправления привязки. Джунфэн Чжан исследует, почему это в его превосходном блоге.

Аналогичный вопрос задается здесь: Можно ли использовать Assembly.ReflectionOnlyLoad вместе с политиками издателя / версией сборки?

...