Answers:
让我首先列出强命名程序集的好处:
对程序集进行强命名可以使程序集包含在全局程序集缓存(GAC)中。因此,它允许您在多个应用程序之间共享它。
强大的命名保证了该程序集的唯一名称。因此,没有其他人可以使用相同的程序集名称。
强名保护程序集的版本沿袭。强大的名称可以确保没有人能够生成程序集的后续版本。确保应用程序用户所加载的程序集版本来自创建应用程序所用版本的同一发布者。
普通装配不能完成哪些工作?
由于从Nuget兴起开始的所有讨论都建议完全摆脱强命名程序集,因此我的公司尝试了这一点,并在应用程序设置方面遇到了行为上的重大变化:
如果您使用VisualStudio提供的自动应用程序或用户范围的应用程序设置(继承System.Configuration.ApplicationSettingsBase),则无论EXE文件位于何处,一个名为EXE的强健文件都会在%LOCALAPPDATA%中准确创建1个目录,例如“ YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif”。位于。
但是没有强名,EXE的位置(= path)将用于创建在DEBUG和RELEASE构建之间已经不同的哈希值,从而在%LOCALAPPDATA%中创建许多名为“ YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf”的目录。这使得ClickOnce部署无法使用,因为安装目录随每次更新而更改。
我想补充一点,如果没有强名,则不能在配置文件中使用绑定重定向。
这将不起作用:
<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>
您需要一个公共密钥令牌
<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>