Переадресация привязки сборки .Net с разными токенами открытого ключа - PullRequest
49 голосов
/ 03 февраля 2010

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

Например, у меня есть две сборки ...

System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

и

System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Должно ли следующее перенаправление привязки сборки работать в Asp.Net web.config ...

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Ответы [ 3 ]

37 голосов
/ 03 февраля 2010

Нет, это невозможно.Сборки должны иметь один и тот же publicKeyToken.

У тега bindingRedirect есть только атрибуты oldVersion и newVersion, поэтому в любом случае невозможно сообщить ему о «нулевой» версии.

Но реальнаяпричина объясняется механизмом строгого имени 1006 *

6 голосов
/ 26 февраля 2010

Возможно, вы сможете использовать событие AppDomain.AssemblyResolve для этого. Я включил пример кода в этот ответ .

1 голос
/ 29 октября 2014

Кажется, что перенаправление привязки не может быть использовано, но в моем случае мне удалось обойти проблему с различными publicKeyTokens, изменив значение токена, запрашиваемое в ссылающейся DLL:

Разберите dll на IL, измените ссылку, заново соберите (и перепишите - что может быть проблемой, если у вас нет ключевого файла).

(См. Мой комментарий к при ссылках на сборки, можно ли настаивать на номере версии, но игнорировать открытый ключ ключа (т.е. принимать подписанный / неподписанный) )

...