CA2210:程序集应具有有效的强名称
类型名 |
AssembliesShouldHaveValidStrongNames |
CheckId |
CA2210 |
类别 |
Microsoft.Design |
是否重大更改 |
否 |
原因
某程序集未使用强名称进行签名、未能验证该强名称,或者该强名称由于计算机的当前注册表中没有相应的设置而无效。
规则说明
该规则检索并验证程序集的强名称。 如果满足以下任一条件,则会发生冲突:
程序集没有强名称。
程序集在签名后发生更改。
程序集的签名延迟。
程序集的签名错误,或者签名失败。
程序集需要注册表设置才能通过验证。 例如,可使用强名称工具 (Sn.exe) 跳过程序集验证。
强名称可避免客户端在不知情的情况下加载已被篡改的程序集。 除非极为有限的几种情况,否则不应部署没有强名称的程序集。 如果共享或发布未正确签名的程序集,则该程序集可能被篡改,公共语言运行时可能不会加载该程序集;而用户可能必须在他/她的计算机上禁用验证。 没有强名称的程序集存在以下缺点:
无法验证其来源。
如果更改了程序集的内容,则公共语言运行时无法警告用户。
无法加载到全局程序集缓存中。
注意,要加载和分析延迟签名的程序集,您必须禁用对该程序集的验证。
如何解决冲突
创建密钥文件
使用以下过程之一:
使用由 .NET Framework SDK 提供的程序集链接器工具 (Al.exe)。
对于 .NET Framework 1.0 版或 1.1 版,请使用 System.Reflection.AssemblyKeyFileAttribute 或 System.Reflection.AssemblyKeyNameAttribute 特性。
对于 .NET Framework 2.0,请使用 /keyfile 或 /keycontainer 编译器选项(C++ 中的 /KEYFILE(指定密钥或密钥对以便为程序集签名) 或 /KEYCONTAINER(指定密钥容器以便为程序集签名) 链接器选项)。
在 Visual Studio 中使用强名称为程序集签名
在 Visual Studio 中打开解决方案。
在**“解决方案资源管理器”中,右击您的项目,然后单击“属性”**。
单击**“签名”选项卡,然后选中“为程序集签名”**复选框。
从**“选择强名称密钥文件”中选择“新建”**。
此时将显示**“创建强名称密钥”**窗口。
在**“密钥文件名称”**中键入强名称密钥的名称。
选择是否使用密码保护密钥,然后单击**“确定”**。
在**“解决方案资源管理器”中,右击您的项目,然后单击“生成”**。
在 Visual Studio 外使用强名称为程序集签名
- 使用 .NET Framework SDK 提供的强名称工具 (Sn.exe)。 有关更多信息,请参见Sn.exe(强名称工具)。
何时禁止显示警告
仅当在不关心程序集内容是否被篡改的环境中使用程序集时,才禁止显示此规则发出的警告。