我的Visual Studio 2010
解决方案引用了第三方专有 DLL。
当我尝试编译解决方案时,错误消息显示为:
无法发出程序集:引用的程序集“NameOfAssembly.DLL”没有强名称
使用我自己的密钥签署第三方 DLL 是解决此问题的唯一方法吗?
我的Visual Studio 2010
解决方案引用了第三方专有 DLL。
当我尝试编译解决方案时,错误消息显示为:
无法发出程序集:引用的程序集“NameOfAssembly.DLL”没有强名称
使用我自己的密钥签署第三方 DLL 是解决此问题的唯一方法吗?
这是任何创建他人使用的程序集的人的犯罪过失,因为在构建程序集时给它一个强名称是多么微不足道。事后做这件事很痛苦,你必须用 ildasm.exe 反编译程序集,然后用 ilasm.exe 将它重新组合在一起,现在使用 /key 选项。
如果您与所有者有工作关系,请向他们发送 nastygram。如果您不这样做,那么您可能应该质疑组件的质量,这是一个重大疏忽,并表明很少有人真正使用该组件。
确保您已获得对程序集进行逆向工程的许可,以作为强名称。我不希望你有任何法律问题。您可以使用 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 版本.
如果您想要强签名程序集,所有引用都必须是强签名的。此条目描述了这些步骤。