“Microsoft 扩展的更正规则”代码分析规则集

“Microsoft 扩展的更正规则”规则集可使代码分析尽可能多地报告逻辑错误和 framework 使用错误。 着重强调了某些特定的方案,如 COM 互操作性和移动应用程序。 如果这些方案中的某一个适用于您的项目,或若要查找项目中的其他问题,应考虑加入此规则集。

“Microsoft 扩展的更正规则”规则集包括“Microsoft 基本更正规则”规则集中的规则。 “基本更正规则”包括“Microsoft 最少量建议规则”规则集中的规则。 有关更多信息,请参见“Microsoft 基本更正规则”代码分析规则集“Microsoft 最少量建议规则”代码分析规则集

下表介绍了“Microsoft 扩展的更正规则”规则集中的所有规则。

规则

说明

CA1032:实现标准异常构造函数

如果不能提供完整的构造函数集,要正确处理异常将变得比较困难。

CA1054:URI 参数不应为字符串

如果某方法采用 URI 的字符串表示形式,则应提供采用 URI 类的实例的相应重载,该重载以安全的方式提供这些服务。

CA1055:URI 返回值不应是字符串

此规则假定该方法返回统一资源标识符 (URI)。 URI 的字符串表示形式容易导致分析和编码错误,并且可造成安全漏洞。 System.Uri 类以一种安全的方式提供这些服务。

CA1056:URI 属性不应是字符串

此规则假定属性表示统一资源标识符 (URI)。 URI 的字符串表示形式容易导致分析和编码错误,并且可造成安全漏洞。 System.Uri 类以一种安全的方式提供这些服务。

CA1057:字符串 URI 重载调用 System.Uri 重载

某个类型声明的方法重载与 System.Uri 参数仅在字符串参数的放置方面有所不同。 采用字符串参数的重载不调用采用 URI 参数的重载。

CA1402:避免在 COM 可见接口中进行重载

在向 COM 客户端公开重载的方法时,只有第一个方法重载保留其名称。 对于后续重载,将为其指定唯一名称,方法是在其名称后面追加一个下划线字符 (_) 和一个与该重载的声明顺序对应的整数。

CA1406:避免对 Visual Basic 6 客户端使用 Int64 参数

Visual Basic 6 COM 客户端不能访问 64 位整数。

CA1407:避免在 COM 可见类型中使用静态成员

COM 不支持静态方法。

CA1408:请不要使用 AutoDual ClassInterfaceType

使用双重接口的类型使客户端可以绑定到特定的接口布局。 如果在将来的版本中对该类型或任何基类型的布局进行更改,将中断绑定到该接口的 COM 客户端。 默认情况下,如果未指定 ClassInterfaceAttribute 特性,则使用仅支持调度的接口。

CA1409:Com 可见类型应该是可创建的

专门标记为对 COM 可见的某个引用类型包含公共的参数化构造函数,但不包含公共的默认(无参数)构造函数。 没有公共默认构造函数的类型不能由 COM 客户端创建。

CA1411:COM 注册方法应该是不可见的

标以 System.Runtime.InteropServices.ComRegisterFunctionAttribute 特性或 System.Runtime.InteropServices.ComUnregisterFunctionAttribute 特性的方法在外部可见。

CA1412:将 ComSource 接口标记为 IDispatch

某个类型标以 System.Runtime.InteropServices.ComSourceInterfacesAttribute 特性,并且至少一个指定的接口未标以设置为 ComInterfaceType.InterfaceIsIDispatch 的 System.Runtime.InteropServices.InterfaceTypeAttribute 特性。

CA1413:避免在 COM 可见值类型中使用非公共字段

对 COM 可见的值类型的非公共实例字段对 COM 客户端可见。 请检查各个字段的内容以查找不应当公开的信息或将对设计或安全性造成意外影响的信息。

CA1414:用 MarshalAs 标记布尔型 P/Invoke 参数

Boolean 数据类型在非托管代码中有多种表示形式。

CA1600:不要使用 Idle 进程优先级

不要将进程优先级设置为 Idle。 具有 System.Diagnostics.ProcessPriorityClass.Idle 优先级的进程将在 CPU 本应处于空闲状态时占用它,从而阻止进入待机状态。

CA1601:不要使用阻止电源状态更改的计时器

频率较高的定期活动会使 CPU 处于繁忙状态,并且会干扰具有节能功能(关闭显示器和硬盘)的空闲计时器。

CA1821:移除空的终结器

应尽可能避免终结器,因为跟踪对象生存期会产生额外的性能系统开销。 空的终结器只会徒增系统开销,而没有一点好处。

CA1824:用 NeutralResourcesLanguageAttribute 标记程序集

NeutralResourcesLanguage 特性通知 ResourceManager 用于显示程序集的非特定区域性资源的语言。 这将改进所加载的第一个资源的查找性能,并缩小工作集。

CA2001:避免调用有问题的方法

某个成员调用可能存在危险或有问题的方法。

CA2003:不要将纤程视为线程

托管线程被视为 Win32 线程。

CA2204:应正确拼写文本

方法体中的文本字符串包含一个或多个未被 Microsoft 拼写检查器库识别的单词。

CA2211:非常量字段不应是可见的

不是常数也不是只读字段的静态字段不是线程安全的。 必须严格控制对这类字段的访问,并需要高级编程技术来同步对类对象的访问。

CA2217:不要使用 FlagsAttribute 标记枚举

外部可见的枚举使用 FlagsAttribute 标记,并且它包含的一个或多个值不是 2 的幂或不是为该枚举定义的其他值的组合。

CA2218:重写 Equals 时重写 GetHashCode

GetHashCode 基于当前实例返回一个适合哈希算法和哈希表之类的数据结构的值。 两个相等的同类型对象必须返回相同的哈希代码。

CA2219:在异常子句中不引发异常

如果在 finally 或 fault 子句中引发异常,新异常将隐藏活动异常。 当在 filter 子句中引发异常时,运行时会在不提示的情况下捕捉异常。 这使得很难检测和调试原始错误。

CA2225:运算符重载具有命名的备用项

检测到运算符重载,但未找到预期的指定备用方法。 命名的备用成员提供了对与运算符相同的功能的访问,它提供给开发人员,在用不支持重载运算符的语言进行编程时使用。

CA2228:不要发行未发布的资源格式

使用 .NET Framework 的预发布版生成的资源文件可能无法用于受支持的 .NET Framework 版本。

CA2230:对可变数量的参数使用 params

公共或受保护类型包含一个使用 VarArgs 调用约定(而不是 params 关键字)的公共或受保护方法。

CA2233:运算不应溢出

如果未首先验证操作数以确保运算结果不会超出所涉及数据类型的允许值范围,则不应执行算术运算。

CA2234:传递 System.Uri 对象,而不传递字符串

调用了带有一个字符串参数的方法,该参数的名称中包含“uri”、“URI”、“urn”、“URN”、“url”或“URL”。 此方法的声明类型包含具有 System.Uri 参数的对应方法重载。

CA2243:应正确分析特性字符串文本

特性的字符串文本参数不能正确解析为 URL、GUID 或版本。