程序集以及何时不能选择强命名?

时间:2008-10-28 14:32:22

标签: c# .net assemblies

前段时间我在Stack Overflow上询问了以下问题, Assembly Names and Versions

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

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

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

该怎么办?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:8)

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

  1. 看看您是否可以联系第三方程序集提供商并请求他们为您签名。
  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. 否则,您可能需要为第三方程序集中当前的功能寻找其他选项。

      祝你好运!

答案 1 :(得分:5)

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

答案 2 :(得分:1)

你可以反汇编第三方库并重新编译它,自己签名。当然,如果违反任何许可证,或者您不了解第三方库的许可证(我假设您在使用它时,您不应该这样做),则不应该这样做。也就是说,如果您与第三方联系,请他们给您签名版本。

答案 3 :(得分:0)

如果您不能要求第三方签署装配(或者在许多情况下该项目已被放弃),您需要自己签署装配。在线的许多例子,包括Lloyd的答案,有时会在往返过程中造成问题。

ILMerge带来了自身的风险,在某些项目中可能无法维护和维护。

我编写了一个应用程序来自动执行任何.NET托管程序集的签名,以克服所有这些限制并可靠地执行这个看似简单的任务。这可以通过UI,命令行或编程API完成,具体取决于您的要求。您可以在此处详细了解该应用并下载:http://brutaldev.com/post/2013/10/18/NET-Assembly-Strong-Name-Signer