我有两个第三方集会:
Foo.dll
和
ReferencesFoo.dll
如上所述,ReferencesFoo.dll
是一个引用Foo.dll
对于我的应用程序,我需要重新签名这些程序集。我结合使用ildasm / ilasm以及签名密钥来重新签名,但ReferencesFoo.dll
仍然包含(在它的清单中?)对Foo.dll
旧公钥和公钥令牌的引用。
那么,如何使用我的密钥对两个dll进行签名,并更新ReferencesFoo.dll
中的引用而不获取源代码并重新编译?
答案 0 :(得分:3)
您可以使用Mono.Cecil轻松完成此操作。打开Foo.dll和save it with your new snk,并将其在ReferenceFoo.dll中的引用更新为相应的公钥令牌。
答案 1 :(得分:2)
您可以使用SN.exe工具对程序集进行签名(使用-R开关来重新签名已签名的程序集)。
但是你必须要知道修改第三方组件可能是非法的。所以在这之前确保没有法律问题。
我不知道有任何自动更改引用的工具。您可以在metadatatable#35中找到它们,其结构如下:
答案 2 :(得分:2)
我发现这篇文章准确地说明了如何做到这一点。
它涉及使用sn,ildasm,ilasm和文本编辑器。
http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing