第三方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选项。 如果你得到一个BadImageexception,那么你检查汇编编译器的CLR版本。如果它是一个CLR 2.0 / 3.5然后使用“C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ ILASM”而不是4.0版本。

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