如果公钥标记在旧版本上为null并且在较新版本上设置,是否可以在引用的程序集的不同版本之间执行程序集绑定重定向?
例如,我有两个程序集......
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>
答案 0 :(得分:37)
不,这是不可能的。程序集需要具有相同的publicKeyToken。
bindingRedirect标记只有oldVersion和newVersion属性,因此无论如何也无法告诉它“null”版本。
,解释了背后的真正原因答案 1 :(得分:6)
您可以使用AppDomain.AssemblyResolve事件来执行此操作。我在this answer中添加了一些示例代码。
答案 2 :(得分:1)
似乎无法使用绑定重定向,但在我的情况下,我确实设法通过修改引用DLL中请求的令牌值来解决不同publicKeyTokens的问题:
将dll反汇编为IL,更改引用,重新组合(并重新签名 - 如果您没有密钥文件,则可能会出现问题)。