我能够从这里破解程序集清单解决以下解决方案
使用 ildasm -> 转储 -> 编辑 IL 代码 -> ilasm -> 从编辑的 IL 代码生成新程序集
以下是链接内容,以防万一它出现故障:
我正在调试一个特别讨厌的问题,发现自己想要编辑已编译的 .NET 程序集的清单,以更改它所引用的程序集的版本号。不一定是最佳实践,但在这种情况下,它可以让我在没有两个小时的构建和部署周期的情况下确认确切的问题。事实证明,像这样令人讨厌的 hack 非常简单:
运行 ILDASM,打开程序集并选择 File...Dump 以提取 IL 在 Visual Studio 中打开 IL 文件并编辑清单——在这种情况下,在文件顶部很容易找到引用程序集的版本号:
// 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 x.y.z
{
.publickeytoken = (E4 21 0D 54 23 66 A2 B4 ) // . .D'f..
.ver 1:0:9:12
}
保存 IL 并使用 ILASM 重新组装 - 如果程序集已签名,请使用 ilasm /DLL xyzil /KEY=xyzsnk 重新签名现在它的依赖项将用于修改后的版本。Simon McEnlly 在 CodeProject 上的文章描述了进一步使用清单来更改方法的可见性,以及在没有源代码的地方修改和重建程序集。请注意,如果程序集已签名并且您没有强名称密钥来重新签名,则修改后的程序集将警告被篡改并且不会加载。