.NET程序集绑定重定向,当新版本已签名但上一版本未签名时

本文关键字:版本 绑定 程序集 重定向 新版本 NET | 更新日期: 2023-09-27 18:28:34

我在.NET程序集重定向方面遇到问题。第三方程序集A引用了另一个第三方的程序集B。B没有签名,因此它没有公钥令牌。A清单:

....
.assembly extern B
{
  .ver 1:0:0:0
}
....

如何将绑定重定向到已签名的B的下一个版本?如果我没有在assemblyBinding/dependentAssembly/assemblyIdentity中指定publicKeyToken,则运行时找不到程序集"B,Version=2.0.0.0,Culture=neutral,publicKeyToken=null"。如果指定,则重定向规则与元数据中的依赖程序集引用不匹配。

.NET程序集绑定重定向,当新版本已签名但上一版本未签名时

如果你知道下一个版本将被签名,你能得到公钥的副本吗?

顺便说一句,在不重新编译的情况下,从无符号到有符号的过程中更改,从技术上讲是可以做到的,但这是一个非常糟糕的主意。

我没有找到从unsigned到signed程序集的绑定重定向的方法。我发现的一个不太好的解决方案是从已签名的程序集中删除签名。要做到这一点,ildasm可以用于反汇编,在从.il文件中删除公钥并使用ilasm更改之后,可以编译.il。