【问题标题】:Assemblies and when strong naming is not an option?程序集以及何时不能选择强命名?
【发布时间】:2008-10-28 14:32:22
【问题描述】:

不久前,我在 StackOverflow 上问了以下问题,Assembly Names and Versions

现在我意识到我无法使用强名称签署我的程序集,因为第 3 方依赖项之一不是强名称程序集,因此我的程序集不可签名。

我试图简单地将程序集文件名 MyAssembly.dll 更改为 MyAssembly.v.1.1.dll 但是当我这样做并引用重命名的程序集时 - 它不会像其他引用一样被复制。似乎是因为文件名和程序集的 Identity 属性不匹配。

我有项目 A 和 B,它们是项目 C 的依赖项。项目 A 需要引用 MyAssembly.dll v.1.0,项目 B 需要引用 MyAssembly.dll v.2.0,因此两者都需要能够位于项目中C 的 bin/Release 文件夹。

有什么可做的?我该如何解决这个问题?

【问题讨论】:

    标签: c# .net assemblies


    【解决方案1】:

    理想情况下,任何自尊的第 3 方程序集开发人员都会签署他们的程序集。我会尝试以下方法:

    1. 看看您是否可以联系第 3 方组装供应商并要求他们为您签名。
    2. 如果第 3 方程序集提供商是开源的,请使用强名称密钥自行下载和编译源代码。 (考虑将其回馈给项目)。

    否则,(只要许可证允许):

    1. 像这样尝试ildasm.exeilasm.exe

      ildasm.exe /out:TheAssembly.il TheAssembly.dll

      ilasm.exe TheAssembly.il /key=MyKey.snk /dll /output=TheAssembly.dll

    2. 尝试ILMerge,就像其他人提到的那样。

    否则,您可能需要为您目前在第 3 方大会中拥有的功能寻找另一个选项。

    祝你好运!

    【讨论】:

      【解决方案2】:

      一种选择可能是使用ILMerge 对第三方程序集进行签名,但如果第三方非常定期地对其程序集进行更新,那么更新会有点麻烦。

      【讨论】:

        【解决方案3】:

        您可以反汇编第 3 方库并重新编译它,然后自己签名。当然,如果它违反了任何许可证或者您不知道 3rd-party 库的许可证(我假设您在使用它时确实如此),您不应该这样做。也就是说,如果您与第 3 方联系,请让他们为您提供签名版本。

        【讨论】:

          【解决方案4】:

          如果您无法向第三方索要已签名的程序集(或者在许多情况下该项目已被放弃),您将需要自己签署该程序集。许多在线示例(包括 Lloyd 的答案)有时会在往返过程中引起问题。

          ILMerge 有其自身的风险,在某些项目中可能无法且难以维护。

          我编写了一个应用程序来自动执行任何 .NET 托管程序集的签名,以克服所有这些限制并可靠地执行这个看似简单的任务。这可以根据您的要求从 UI、命令行或编程 API 完成。您可以阅读有关该应用程序的更多信息并在此处下载:http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-07
            相关资源
            最近更新 更多