不同公钥令牌的.Net程序集绑定重定向

61

如果旧版本的公钥令牌为 null 而新版本设置了公钥令牌,是否可以在引用的程序集不同版本之间执行汇编绑定重定向?

例如,我有两个程序集...

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

和 (and)

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个回答

48

不,这是不可能的。程序集需要具有相同的 publicKeyToken。

bindingRedirect 标签只有 oldVersion 和 newVersion 属性,因此无法将其告知关于“null”版本的任何信息。

但真正的原因是由于强名称机制所解释的。


6

6
不幸的是,似乎公钥令牌仍然必须匹配。当我尝试手动加载不同的程序集(使用 bindingRedirect 或不使用),我会收到“所定位的程序集清单定义与程序集引用不匹配”的错误信息。 - ladenedge
@ladenedge,如果您查看我链接的答案中的示例代码,它允许您使用任何标准来决定要使用哪个程序集。在示例中,我使用了程序集名称并忽略了公钥令牌。请注意,我的示例是从文件动态加载程序集,而不是在启动时加载。公平地说,我没有尝试过您所说的事情,因此可能是不可能的。 - Don Kirkby

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接