CA2210:程序集应具有有效的强名称

类型名

AssembliesShouldHaveValidStrongNames

CheckId

CA2210

类别

Microsoft.Design

是否重大更改

原因

某程序集未使用强名称进行签名、未能验证该强名称,或者该强名称由于计算机的当前注册表中没有相应的设置而无效。

规则说明

该规则检索并验证程序集的强名称。 如果满足以下任一条件,则会发生冲突:

  • 程序集没有强名称。

  • 程序集在签名后发生更改。

  • 程序集的签名延迟。

  • 程序集的签名错误,或者签名失败。

  • 程序集需要注册表设置才能通过验证。 例如,可使用强名称工具 (Sn.exe) 跳过程序集验证。

强名称可避免客户端在不知情的情况下加载已被篡改的程序集。 除非极为有限的几种情况,否则不应部署没有强名称的程序集。 如果共享或发布未正确签名的程序集,则该程序集可能被篡改,公共语言运行时可能不会加载该程序集;而用户可能必须在他/她的计算机上禁用验证。 没有强名称的程序集存在以下缺点:

  • 无法验证其来源。

  • 如果更改了程序集的内容,则公共语言运行时无法警告用户。

  • 无法加载到全局程序集缓存中。

注意,要加载和分析延迟签名的程序集,您必须禁用对该程序集的验证。

如何解决冲突

创建密钥文件

使用以下过程之一:

在 Visual Studio 中使用强名称为程序集签名

  1. 在 Visual Studio 中打开解决方案。

  2. 在**“解决方案资源管理器”中,右击您的项目,然后单击“属性”**。

  3. 单击**“签名”选项卡,然后选中“为程序集签名”**复选框。

  4. 从**“选择强名称密钥文件”中选择“新建”**。

    此时将显示**“创建强名称密钥”**窗口。

  5. 在**“密钥文件名称”**中键入强名称密钥的名称。

  6. 选择是否使用密码保护密钥,然后单击**“确定”**。

  7. 在**“解决方案资源管理器”中,右击您的项目,然后单击“生成”**。

在 Visual Studio 外使用强名称为程序集签名

何时禁止显示警告

仅当在不关心程序集内容是否被篡改的环境中使用程序集时,才禁止显示此规则发出的警告。

请参见

任务

如何:使用强名称为程序集签名

参考

Sn.exe(强名称工具)

System.Reflection.AssemblyKeyFileAttribute

System.Reflection.AssemblyKeyNameAttribute