如何更改程序集的Public标记

Nit*_*its 3 .net dll assemblies

我有两个组件.一个组件指的是另一个组件.我检查了第一个程序集的清单,发现它引用了第二个程序集,并带有一些特定的令牌密钥.

但我检查了第二个程序集的标记,发现它有一个不同的公共标记.所以我错过了正确的第二次组装.所以我想知道有没有办法可以将第二个程序集的公共令牌更改为第一个程序集需要的那个.

另外我还有另一个第二个程序集,它具有public token = null.

Mar*_*tin 10

听起来你想重建第二个组件并用不同的密钥签名,如果你有源代码就很容易,所以我想你不这样做?

我认为使用第二个程序集中存在的公钥令牌重建第一个程序集以便它引用您拥有的第二个程序集会更容易.更容易,但不是完全直截了当.

我认为您应该能够通过运行第一个程序集来实现它,ildasm.exe将引用上的公钥标记更改为第二个程序集,然后运行结果ilasm.exe,以生成第一个程序集的新版本.

所涉及步骤的大致轮廓......

  1. ildasm.exe /out=first.il first.dll(或first.exe)
  2. 编辑first.il并找到.assembly extern块以供参考second.dll
  3. 更改该块中的公钥标记
  4. 跑去ilasm.exe first.il生产first.dll(或first.exe)

请注意,我没有长时间使用这些工具,也从不以这种方式操纵公钥令牌,所以你可能需要添加一些你自己的聪明才智.但另一方面,我想不出这种方法不起作用的原因.


Eug*_*its 6

你问"我怎样才能建立第二个集会的签名,让第一个集会认为它是原创的".除非你有一个密钥对,用于签署"正确"的程序集,否则你不能.因此,最好的方法是要求程序集的供应商提供正确的对.