第三方DLL没有“强名称”?

6

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

当我尝试编译解决方案时,出现以下错误消息:

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

解决这个问题的唯一方法是使用自己的密钥对第三方DLL进行签名吗?

3个回答

6
任何创建供他人使用的程序集的人,如果在构建程序集时没有为其赋予强名称,那么这是一种犯罪的疏忽。赋予强名称非常简单。但事后更改则相当麻烦,需要使用ildasm.exe反编译程序集,再用ilasm.exe重新组装,并使用/key选项。
如果您与所有者有工作关系,则可以向他们发送不良邮件。如果没有,则您可能应该质疑程序集的质量。这是一个重大的疏忽,表明很少有人实际使用该程序集。

嗯,删掉第一段落并发送那封电子邮件。 - Hans Passant
2
@HansPassant 有趣的是,Dapper也没有签名。我们目前需要使用Dapper Nuget包来解决这个问题。我们需要在源代码中使用已签名的程序集,为此我们暂时将Dapper源代码集成到了项目中。 - Adam Houldsworth
开源项目不应该受到恶言相向。并且你也不需要做出这种行为,因为这是一个 StackExchange 项目且 Marc Gravell 经常为其做出贡献 :) - Hans Passant
1
最近,也出现了一种相反的观点,比如来自这篇博客 - user6996876

4
请确保您已获得反汇编装配程序的许可证,以获得强名称。我不希望您遇到任何法律问题。您可以使用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版本。

3

如果您想要强名称程序集,则必须所有引用都是强名称的。这个链接描述了具体步骤。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接