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

发现这些有用的链接简化了SO。

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

如何修复“引用程序集没有强名称”错误?

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

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

通过将程序集拆分为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 

您现在将使用相同的程序集,只是它的签名版本。 您可以阅读有关强名称密钥生成的更多信息,但我假设您已经知道如何根据问题执行此操作。

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