Ответ 1
Нет, это невозможно. В сборках должен быть такой же publicKeyToken.
Тег bindingRedirect имеет только атрибуты oldVersion и newVersion, поэтому в любом случае нет возможности рассказать об "нулевой" версии.
Возможно ли выполнить переадресацию привязки сборки между различными версиями ссылочной сборки, если токен открытого ключа равен нулю в более старой версии и установлен в более новой версии?
Например, у меня есть две сборки...
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>
Нет, это невозможно. В сборках должен быть такой же publicKeyToken.
Тег bindingRedirect имеет только атрибуты oldVersion и newVersion, поэтому в любом случае нет возможности рассказать об "нулевой" версии.
Возможно, вы сможете использовать AppDomain.AssemblyResolve для этого. Я включил несколько примеров кода в этот ответ.
Кажется, что привязка-переадресация не может быть использована, но в моем случае мне удалось обойти эту проблему с разными publicKeyTokens, изменив значение токена, запрашиваемое в справочной DLL:
Разберите DLL с IL, замените ссылку, повторно соберите (и перепишите - что может быть проблемой, если у вас нет ключевого файла).
(см. мой комментарий на при ссылках на сборки, можно ли настаивать на номере версии, но игнорировать публикацию? (т.е. принимать подписанные/неподписанные))