什么时候不应该创建大会的强名? “强名命组装”有哪些缺点?

时间:2010-02-22 10:29:01

标签: c# assemblies

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

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

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

我想用上面的故事说的是

  1. 仅当我们必须将强名称添加到GAC时才使用强名称。
  2. 如果我们有一个应用程序,其中单个程序集需要更新,请不要使用强名称程序集。
  3. 我对第1点和第2点是否正确?

    何时不应使用强名称程序集?

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

2 个答案:

答案 0 :(得分:8)

只有在将程序集放在GAC中时才真正需要它,但它也有助于防止篡改。更改程序集中的代码非常容易,因此这给坏人带来了好处。当您使用强名称程序集时,您只能使用私钥对其进行签名。人们仍然可以改变你的程序集,但他们不能给它相同的强名,因为他们没有你的私钥。在那种情况下.Net拒绝组装篡改。当他们使用新的私钥对您的程序集进行签名时,.Net仍然拒绝加载它,因为程序集的标识已经更改。

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

答案 1 :(得分:3)

两者都正确。
如果您之后签署了程序集,则不需要StrongName,就像使用真实证书一样。
在我看来,强有力的命名并不值得,例如this link。那么你需要将它组装到GAC中,但就是这样。