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

更新:2007 年 11 月

TypeName

AssembliesShouldHaveValidStrongNames

CheckId

CA2210

类别

Microsoft.Design

是否重大更改

原因

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

规则说明

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

  • 程序集没有强名称。

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

  • 程序集的签名延迟。

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

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

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

  • 无法验证其来源。

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

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

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

如何修复冲突

创建密钥文件

使用以下过程之一:

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

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

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

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

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

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

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

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

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

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

  • 使用强名称工具 (Sn.exe)。

何时禁止显示警告

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

请参见

任务

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

参考

强名称工具 (Sn.exe)

System.Reflection.AssemblyKeyFileAttribute

System.Reflection.AssemblyKeyNameAttribute