C# 引用程序集时,是否可以坚持使用版本号但忽略publickeytoken?(即接受签名/未签名)

C# 引用程序集时,是否可以坚持使用版本号但忽略publickeytoken?(即接受签名/未签名),c#,.net,assemblies,publickeytoken,C#,.net,Assemblies,Publickeytoken,根据问题, 是否可以指定对另一个程序集的引用,该程序集需要特定的版本,但不坚持使用特定的publickeytoken?我的直觉是否定的(因为我猜测何时指定了版本,使用了整个完全限定的程序集名称,其中包括version和pkt) 因此,如果我有这种情况: 程序集A的v1.0(未签名) 组件B的v1.0需要组件A的v1.0 在没有源代码的情况下,我是否可以(通过ildasm+ilasm)对程序集进行重新签名,从而使A&B的工作版本得到签名 因此,这并不能完全回答问题,但解决了我的基本方案,将一对未签

根据问题,

是否可以指定对另一个程序集的引用,该程序集需要特定的版本,但不坚持使用特定的publickeytoken?我的直觉是否定的(因为我猜测何时指定了版本,使用了整个完全限定的程序集名称,其中包括version和pkt)

因此,如果我有这种情况:

程序集A的v1.0(未签名) 组件B的v1.0需要组件A的v1.0

在没有源代码的情况下,我是否可以(通过ildasm+ilasm)对程序集进行重新签名,从而使A&B的工作版本得到签名

因此,这并不能完全回答问题,但解决了我的基本方案,将一对未签名的程序集移动到签名版本,同时保持特定的版本要求。事实证明,在对程序集进行签名时,在对其进行ilasm之前,可以打开.il并查看顶部附近的内容,然后为引用添加特定的publickeytoken,如下所示:

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern My.Assembly
{
  .publickeytoken = (3E 5D C7 B6 5B C4 C7 0E )                         // .z\V.4..
  .ver 1:0:0:0
}
.assembly extern System.Core
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 3:5:0:0
}

编译后,一切都应该按预期进行:)

我看到了这个问题/答案,但它看起来有点过火了-谢谢-正是我需要的。必须强制第三方程序集使用我自己的开源程序集自定义版本,我已经编译了该程序集,但无法使用“原始”密钥文件签名(因此该程序集具有不同的publicKeyToken)。反汇编、编辑IL中的publickeytoken值、汇编(当然,使用不同的密钥文件,这需要进一步向上扩展,并以类似方式修复多个引用),魔术就完成了。有用的命令来自@BrutalDev在