【发布时间】:2013-03-17 10:36:59
【问题描述】:
我的Visual Studio 2010 解决方案引用了第三方专有 DLL。
当我尝试编译解决方案时,错误消息显示:
无法发出程序集:引用的程序集“NameOfAssembly.DLL”确实 没有一个强大的名字
这个问题的唯一解决方案是用我自己的密钥签署第三方 DLL 吗?
【问题讨论】:
标签: c# .net vb.net visual-studio-2010 assembly-signing
我的Visual Studio 2010 解决方案引用了第三方专有 DLL。
当我尝试编译解决方案时,错误消息显示:
无法发出程序集:引用的程序集“NameOfAssembly.DLL”确实 没有一个强大的名字
这个问题的唯一解决方案是用我自己的密钥签署第三方 DLL 吗?
【问题讨论】:
标签: c# .net vb.net visual-studio-2010 assembly-signing
这是任何人创建他人使用的程序集的犯罪过失,因为在构建程序集时给它一个强名称是多么微不足道。事后做这件事很痛苦,你必须用 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 版本.
【讨论】:
如果您想要强签名程序集,所有引用都必须是强签名的。这个entry 描述了这些步骤。
【讨论】: