【问题标题】:Third party DLL does not have 'strong name'?第三方 DLL 没有“强名称”?
【发布时间】:2013-03-17 10:36:59
【问题描述】:

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

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

无法发出程序集:引用的程序集“NameOfAssembly.DLL”确实 没有一个强大的名字

这个问题的唯一解决方案是用我自己的密钥签署第三方 DLL 吗?

【问题讨论】:

    标签: c# .net vb.net visual-studio-2010 assembly-signing


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,放弃第一段并发送该电子邮件。
    • @HansPassant 有趣的是,Dapper 也没有签名。我们目前不得不使用 Dapper Nuget 包来解决这个问题。我们需要在我们的源代码上签名程序集,我们暂时通过集成 Dapper 源代码来完成。
    • 开源项目不值得讨厌。并不是说你必须把它发送很远,这是一个 StackExchange 项目,Marc Gravell 是一个频繁的贡献者:)
    • 最近也有相反的观点,比如来自this blog
    【解决方案2】:

    确保您已获得对程序集进行逆向工程的许可,以作为强名称。我不希望你有任何法律问题。您可以使用 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】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多