C# 我们什么时候不应该创建Assembly';谁的名字好?“的缺点是什么?”;强命名程序集“;?

C# 我们什么时候不应该创建Assembly';谁的名字好?“的缺点是什么?”;强命名程序集“;?,c#,assemblies,C#,Assemblies,我有一个项目,即library.exe。在本文中,我引用了一个程序集(logging.dll1.0.3.0版),并为该程序集指定了一个强名称 现在假设我在logging.dll中更改了一个方法,并将其制作成1.0.4.0版 现在,当我用这个新的DLL复制/替换旧的DLL时,我遇到了一个异常。 我知道这个异常是因为我更改了DLL的版本号。由于它是一个强名称DLL,除非我重新生成library.exe,否则不允许使用它 我想对上面的故事说的是 仅当我们必须将程序集添加到GAC时,才对程序集使用强名称

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

现在假设我在
logging.dll
中更改了一个方法,并将其制作成1.0.4.0版

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

我想对上面的故事说的是

  • 仅当我们必须将程序集添加到GAC时,才对程序集使用强名称
  • 如果我们有一个需要更新单个程序集的应用程序,请不要使用强名称程序集
  • 我的第一点和第二点正确吗

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

    “强命名程序集”的缺点是什么?两者都正确。
    如果您在事后对程序集进行签名(如使用真实证书),则不需要StrongName。

    在我的观点中,强命名并没有真正的价值,例如。将程序集放入GAC时需要它,但仅此而已。

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

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