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

sgt*_*gtz 22 .net c#

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

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

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

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

Bru*_*Dev 35

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

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

打开Visual Studio命令提示符并浏览到包含未签名程序集的目录.从命令提示符运行以下命令.

ildasm.exe /all /typelist /out=My.Unsigned.Assemby.il My.Unsigned.Assemby.dll
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为My.Unsigned.Assemby.il的程序集的IL版本

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

ilasm.exe /dll /optimize /key=MyKeyFile.snk My.Unsigned.Assemby.il
Run Code Online (Sandbox Code Playgroud)

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

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