在签名的组件中使用无符号组件

时间:2011-11-02 08:14:11

标签: c# .net

找到了这些有用的链接。

http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/

How to fix "Referenced assembly does not have a strong name" error?

我遵循这个过程。这似乎很容易。只是想知道是否有一个点击式自动化工具可以为我这样做 - 特别是对于无符号第三方A.dll引用未签名的B.dll引用无符号C.dll的情况。

1 个答案:

答案 0 :(得分:33)

您可以自行对程序集进行签名,以便在您无法让作者为您签名时,您也可以在已签名的项目中引用它们。

通过将程序集反汇编为IL,然后使用您自己的强名称密钥文件重新组装它来执行此操作。

打开 Visual Studio命令提示符并浏览到包含无符号程序集的目录。从命令提示符运行以下命令。

ildasm.exe /all /typelist /out=My.Unsigned.Assemby.il My.Unsigned.Assemby.dll

这将创建一个名为 My.Unsigned.Assemby.il

的程序集的IL版本

接下来,您需要使用强名称密钥对其进行重新组合而不进行修改。

ilasm.exe /dll /optimize /key=MyKeyFile.snk My.Unsigned.Assemby.il

现在您将使用相同的程序集,只是它的签名版本。您可以阅读有关strong name key generation的更多信息,但我认为您已经知道如何根据问题执行此操作。

更新:我已经编写了一个应用程序,可以从UI,命令行或通过API以编程方式自动执行此操作。它处理所有边缘情况,以及使用正确的标志组装回正确的版本。您可以在此处详细了解该工具并下载该工具:http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer