为什么使用强名称程序集?

dev*_*per 102 .net c#

使用强名称程序集有什么好处?

普通装配无法做到的事情是什么?

Kyl*_*ndo 88

让我列出强大命名组件的好处:

  1. 强大的命名程序集允许您将程序集包含到全局程序集缓存(GAC)中.因此,它允许您在多个应用程序之间共享它.

  2. 强命名保证了该程序集的唯一名称.因此,没有其他人可以使用相同的程序集名称.

  3. 强名称保护程序集的版本谱系.强名称可以确保没有人能够生成后续版本的程序集.应用程序用户可以确保他们加载的程序集版本来自创建应用程序构建版本的同一发布者.

  4. 强命名程序集使用数字签名进行签名.这可以保护组件免受修改.任何篡改都会导致在装配加载时发生的验证过程失败.生成异常并且未加载程序集.

有关Microsoft强命名的更多信息,请参阅强名称程序集(MSDN).

  • 关于#4是不正确的.它不是为防止篡改而设计的.有关更多信息,请参见http://blogs.msdn.com/b/shawnfa/archive/2005/12/13/authenticode-and-assemblies.aspx. (17认同)

spr*_*y76 9

普通装配无法做到的事情是什么?

由于所有以Nuget崛起开始的讨论建议完全摆脱强大的命名程序集,我的公司尝试了这一点,并在应用程序设置方面遇到了重大的行为改变:

如果您使用自动应用程序或用户级范围由VisualStudio的(继承System.Configuration.ApplicationSettingsBase)提供的应用程序设置,再强的名为EXE将创建一个名为例如"YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif"%LOCALAPPDATA%无论身在何处的EXE里面正好1目录位于.

但EXE没有强名称的位置(=路径)将被用来创建已不同的调试和发布版本之间,营造%LOCALAPPDATA%里面很多目录命名,如"YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf"的哈希值.这使得它无法用于ClickOnce部署,其中安装目录随每次更新而更改.


小智 6

我想补充一点,如果没有强名称,您将无法在配置文件中使用绑定重定向。

这将不起作用:

  <dependentAssembly>
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

你需要有一个公钥令牌

  <dependentAssembly>
    <assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

  • 如果您没有强名称,则不需要绑定重定向。 (10认同)