【问题标题】:When should we not create Assembly's strong name? What are the disadvantages of "strong named assembly"?我们什么时候不应该创建 Assembly 的强名称? “强命名程序集”的缺点是什么?
【发布时间】:2010-02-22 10:29:01
【问题描述】:

我有一个项目,即library.exe。在本文中,我引用了一个程序集 (logging.dll ver 1.0.3.0),并且我给了这个程序集一个强名称。

现在假设我更改了 logging.dll 中的一个方法并制作了 1.0.4.0 版本。

现在,当我用这个新的 DLL 复制/替换旧 DLL 时,我遇到了一个异常。 我知道这个例外是因为我更改了 DLL 的版本号。因为它是一个强名称 DLL,所以除非我重建 library.exe,否则它是不允许的。

上面的故事我想说的是

  1. 仅当我们必须将其添加到 GAC 时,才对程序集使用强名称。
  2. 如果我们的应用程序需要更新单个程序集,请不要使用强命名程序集。

我对第 1 点和第 2 点的看法正确吗?

什么时候不应该使用强命名程序集?

“强命名程序集”的缺点是什么?

【问题讨论】:

    标签: c# assemblies


    【解决方案1】:

    仅当您想将程序集放在 GAC 中时才真正需要它,但它也有助于防止篡改。更改程序集中的代码相当容易,因此这为坏人提供了优势。当您使用强命名程序集时,您将使用只有您拥有的私钥对其进行签名。人们仍然可以更改您的程序集,但他们不能给它相同的强名称,因为他们没有您的私钥。在这种情况下,.Net 拒绝篡改程序集。当他们使用新的私钥签署您的程序集时,.Net 仍然拒绝加载它,因为程序集的身份已更改。

    有几种方法可以解决版本控制问题。当您的应用程序想要加载 v1 程序集时,您可以告诉它看起来很 v2。请参阅here 了解更多信息。另一种选择是根本不更改程序集版本,而仅更改程序集的文件版本。对于 .Net,程序集是相同的,但您和您的安装程序仍然可以看到哪个更新。请参阅AssemblyFileVersion 属性。

    【讨论】:

      【解决方案2】:

      两者都正确。
      如果您之后签署程序集,则不需要 StrongName,就像使用真正的证书一样。
      在我看来,强命名并不值得任何东西,例如见this link。好吧,您需要它来将程序集放入 GAC,仅此而已。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 2021-09-07
        相关资源
        最近更新 更多