Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 强签名和更新引用程序集_.net_Assemblies_Code Signing_Strongname - Fatal编程技术网

.net 强签名和更新引用程序集

.net 强签名和更新引用程序集,.net,assemblies,code-signing,strongname,.net,Assemblies,Code Signing,Strongname,我有两个第三方程序集: Foo.dll 及 ReferencesFoo.dll 如前所述,ReferencesFoo.dll是一个引用了Foo.dll 为了我的申请,我需要辞职。我将ildasm/ilasm与签名密钥结合使用以放弃它们,但是,ReferencesFoo.dll仍然包含(在它的清单中?)对Foo.dll旧公钥和公钥令牌的引用 那么,如何使用密钥对两个dll进行签名,并更新ReferencesFoo.dll中的引用,而不获取源代码并重新编译?您可以使用SN.exe工具对程序集进行签名

我有两个第三方程序集:

Foo.dll

ReferencesFoo.dll

如前所述,
ReferencesFoo.dll
是一个引用了
Foo.dll

为了我的申请,我需要辞职。我将ildasm/ilasm与签名密钥结合使用以放弃它们,但是,
ReferencesFoo.dll
仍然包含(在它的清单中?)对
Foo.dll
旧公钥和公钥令牌的引用


那么,如何使用密钥对两个dll进行签名,并更新
ReferencesFoo.dll
中的引用,而不获取源代码并重新编译?

您可以使用SN.exe工具对程序集进行签名(使用-R开关退出已签名的程序集)

但您必须知道,修改第三方组件可能是非法的。因此,在这样做之前,确保没有法律问题

我不知道有什么工具可以自动更改引用。您可以在metadatatable#35中找到它们,其结构如下:

  • 主要版本, BuildNumber,修订号(2字节 常数)
  • 标志(类型为的4字节位掩码 (国旗)
  • PublicKeyOrToken(索引为Blob heap–用于 确定此文件的作者 装配)
  • 名称(索引到字符串堆)
  • 区域性(索引到字符串堆)
  • HashValue(索引到Blob堆中)

您可以轻松地使用。打开Foo.dll,并将referencefo.dll中的引用更新为相应的公钥令牌。

我找到了这篇文章,它准确地演示了如何执行此操作

它涉及到使用sn、ildasm、ilasm和文本编辑器


添加了关于在何处查找答案参考的说明。