5

我的Visual Studio 2010解决方案引用了第三方专有 DLL。

当我尝试编译解决方案时,错误消息显示为:

无法发出程序集:引用的程序集“NameOfAssembly.DLL”没有强名称

使用我自己的密钥签署第三方 DLL 是解决此问题的唯一方法吗?

4

3 回答 3

5

这是任何创建他人使用的程序集的人的犯罪过失,因为在构建程序集时给它一个强名称是多么微不足道。事后做这件事很痛苦,你必须用 ildasm.exe 反编译程序集,然后用 ilasm.exe 将它重新组合在一起,现在使用 /key 选项。

如果您与所有者有工作关系,请向他们发送 nastygram。如果您不这样做,那么您可能应该质疑组件的质量,这是一个重大疏忽,并表明很少有人真正使用该组件。

于 2013-03-17T12:50:36.443 回答
3

确保您已获得对程序集进行逆向工程的许可,以作为强名称。我不希望你有任何法律问题。您可以使用 ILDASM 和 ILASM 命令对程序集进行强命名。在 Visual Studio 命令提示符下。

使用 ILDASM 将程序集转换为 MISL 代码。ILDASM MyThirdParty.dll /out:MyThirdParty.il

使用 ILASM 使用强名称键进行编译。ILASM MyThirdParty.il /dll /resource=MyThirdParty.res /key=MyKey.snk

如果您需要创建强名称密钥,请使用 SN 命令。我认为它是 -k 选项。如果遇到 BadImage 异常,则检查程序集编译的 CLR 版本。如果它是 CLR 2.0/3.5,则使用“C:\Windows\Microsoft.NET\Framework\v2.0.50727\ILASM”而不是 4.0 版本.

于 2014-04-10T19:23:02.380 回答
2

如果您想要强签名程序集,所有引用都必须是强签名的。此条描述了这些步骤。

于 2013-03-17T10:42:47.623 回答