2010-02-22 35 views
12

我有一个项目,即library.exe。在这里我引用了一个程序集(logging.dll ver 1.0.3.0),并且给了这个程序集一个强有力的名字。什么时候我们不应该创建Assembly的强名? “强命名集会”的缺点是什么?

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

现在当我复制/替换旧的DLL与这个新的我有一个异常。 我知道这个异常是因为我改变了DLL的版本号。由于这是一个强大的名称DLL,除非我重建library.exe,否则不允许。

我想用上面的故事说的是

  1. 使用强名称与装配,只有当我们将它添加到GAC。
  2. 如果我们有个别程序集需要更新的应用程序,请不要使用强命名程序集。

我正确与点1和2?

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

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

回答

3

两者都正确。
如果您事后对组件进行签名,则不需要使用StrongName,就像使用真正的证书一样。
在我的看法中,强烈的命名并不值得做任何事情,例如参见this link。那么你需要它将程序集放到GAC中,但就是这样。

8

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

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

相关问题