我有一个项目,即library.exe。在本文中,我引用了一个程序集(logging.dll 1.0.3.0版),并为该程序集起了一个强名称。

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

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

我想在上面的故事中说的是

  • 仅在必须将强名称添加到GAC时才在程序集中使用强名称。
  • 如果我们有一个需要更新单个程序集的应用程序,请不要使用强命名程序集。

  • 我对第1点和第2点正确吗?

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

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

    最佳答案

    仅当您要将装配放置在GAC中时才真正需要它,但这也有助于防止篡改。更改程序集中的代码非常容易,因此这给不好的人带来了好处。使用强命名程序集时,仅使用私钥对其进行签名。人们仍然可以更改您的程序集,但由于他们没有您的私钥,因此不能给它起同样的名字。在这种情况下,.Net拒绝对该组件进行篡改。当他们使用新的私钥对程序集签名时,.Net仍拒绝加载它,因为程序集的身份已更改。

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

    关于c# - 我们什么时候不应该建立Assembly的强名呢? "strong named assembly"的缺点是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2310246/

    10-10 23:51