3

不久前,我在 Stack Overflow、 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/发布文件夹。

有什么可做的?我怎样才能解决这个问题?

4

4 回答 4

8

理想情况下,任何自尊的第 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 。

否则,您可能需要为您目前在 3rd 方程序集中拥有的功能寻找另一个选项。

祝你好运!

于 2008-10-30T19:09:53.747 回答
5

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

于 2008-10-28T14:47:43.560 回答
1

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

于 2008-10-28T20:14:29.467 回答
0

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

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

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

于 2013-10-18T22:04:03.317 回答