.Net程序集绑定redirect与不同的公钥标记

如果公钥标记在旧版本上为空,并在较新版本上设置,是否有可能在引用程序集的不同版本之间执行程序集绑定redirect?

例如,我有两个程序集…

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

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

如果下面的程序集绑定redirect工作在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事件来做到这一点。 我在这个答案中包含了一些示例代码。

它似乎不能使用绑定redirect,但在我的情况下,我设法通过修改引用DLL中请求的标记值来解决不同publicKeyTokens的问题:

拆卸DLL到IL,更改引用,重新组装(和重新签名 – 这可能是一个问题,如果你没有密钥文件)。

(请参阅我在引用程序集时的注释,是否可以坚持版本号,但忽略publickeytoken?(即接受签名/未签名) )