“Microsoft 扩展的更正规则”代码分析规则集
“Microsoft 扩展的更正规则”规则集可使代码分析尽可能多地报告逻辑错误和 framework 使用错误。 着重强调了某些特定的方案,如 COM 互操作性和移动应用程序。 如果这些方案中的某一个适用于您的项目,或若要查找项目中的其他问题,应考虑加入此规则集。
“Microsoft 扩展的更正规则”规则集包括“Microsoft 基本更正规则”规则集中的规则。 “基本更正规则”包括“Microsoft 最少量建议规则”规则集中的规则。 有关更多信息,请参见“Microsoft 基本更正规则”代码分析规则集和“Microsoft 最少量建议规则”代码分析规则集。
下表介绍了“Microsoft 扩展的更正规则”规则集中的所有规则。
规则 |
说明 |
---|---|
如果不能提供完整的构造函数集,要正确处理异常将变得比较困难。 |
|
如果某方法采用 URI 的字符串表示形式,则应提供采用 URI 类的实例的相应重载,该重载以安全的方式提供这些服务。 |
|
此规则假定该方法返回统一资源标识符 (URI)。 URI 的字符串表示形式容易导致分析和编码错误,并且可造成安全漏洞。 System.Uri 类以一种安全的方式提供这些服务。 |
|
此规则假定属性表示统一资源标识符 (URI)。 URI 的字符串表示形式容易导致分析和编码错误,并且可造成安全漏洞。 System.Uri 类以一种安全的方式提供这些服务。 |
|
某个类型声明的方法重载与 System.Uri 参数仅在字符串参数的放置方面有所不同。 采用字符串参数的重载不调用采用 URI 参数的重载。 |
|
在向 COM 客户端公开重载的方法时,只有第一个方法重载保留其名称。 对于后续重载,将为其指定唯一名称,方法是在其名称后面追加一个下划线字符 (_) 和一个与该重载的声明顺序对应的整数。 |
|
Visual Basic 6 COM 客户端不能访问 64 位整数。 |
|
COM 不支持静态方法。 |
|
使用双重接口的类型使客户端可以绑定到特定的接口布局。 如果在将来的版本中对该类型或任何基类型的布局进行更改,将中断绑定到该接口的 COM 客户端。 默认情况下,如果未指定 ClassInterfaceAttribute 特性,则使用仅支持调度的接口。 |
|
专门标记为对 COM 可见的某个引用类型包含公共的参数化构造函数,但不包含公共的默认(无参数)构造函数。 没有公共默认构造函数的类型不能由 COM 客户端创建。 |
|
标以 System.Runtime.InteropServices.ComRegisterFunctionAttribute 特性或 System.Runtime.InteropServices.ComUnregisterFunctionAttribute 特性的方法在外部可见。 |
|
某个类型标以 System.Runtime.InteropServices.ComSourceInterfacesAttribute 特性,并且至少一个指定的接口未标以设置为 ComInterfaceType.InterfaceIsIDispatch 的 System.Runtime.InteropServices.InterfaceTypeAttribute 特性。 |
|
对 COM 可见的值类型的非公共实例字段对 COM 客户端可见。 请检查各个字段的内容以查找不应当公开的信息或将对设计或安全性造成意外影响的信息。 |
|
Boolean 数据类型在非托管代码中有多种表示形式。 |
|
不要将进程优先级设置为 Idle。 具有 System.Diagnostics.ProcessPriorityClass.Idle 优先级的进程将在 CPU 本应处于空闲状态时占用它,从而阻止进入待机状态。 |
|
频率较高的定期活动会使 CPU 处于繁忙状态,并且会干扰具有节能功能(关闭显示器和硬盘)的空闲计时器。 |
|
应尽可能避免终结器,因为跟踪对象生存期会产生额外的性能系统开销。 空的终结器只会徒增系统开销,而没有一点好处。 |
|
NeutralResourcesLanguage 特性通知 ResourceManager 用于显示程序集的非特定区域性资源的语言。 这将改进所加载的第一个资源的查找性能,并缩小工作集。 |
|
某个成员调用可能存在危险或有问题的方法。 |
|
托管线程被视为 Win32 线程。 |
|
方法体中的文本字符串包含一个或多个未被 Microsoft 拼写检查器库识别的单词。 |
|
不是常数也不是只读字段的静态字段不是线程安全的。 必须严格控制对这类字段的访问,并需要高级编程技术来同步对类对象的访问。 |
|
外部可见的枚举使用 FlagsAttribute 标记,并且它包含的一个或多个值不是 2 的幂或不是为该枚举定义的其他值的组合。 |
|
GetHashCode 基于当前实例返回一个适合哈希算法和哈希表之类的数据结构的值。 两个相等的同类型对象必须返回相同的哈希代码。 |
|
如果在 finally 或 fault 子句中引发异常,新异常将隐藏活动异常。 当在 filter 子句中引发异常时,运行时会在不提示的情况下捕捉异常。 这使得很难检测和调试原始错误。 |
|
检测到运算符重载,但未找到预期的指定备用方法。 命名的备用成员提供了对与运算符相同的功能的访问,它提供给开发人员,在用不支持重载运算符的语言进行编程时使用。 |
|
使用 .NET Framework 的预发布版生成的资源文件可能无法用于受支持的 .NET Framework 版本。 |
|
公共或受保护类型包含一个使用 VarArgs 调用约定(而不是 params 关键字)的公共或受保护方法。 |
|
如果未首先验证操作数以确保运算结果不会超出所涉及数据类型的允许值范围,则不应执行算术运算。 |
|
调用了带有一个字符串参数的方法,该参数的名称中包含“uri”、“URI”、“urn”、“URN”、“url”或“URL”。 此方法的声明类型包含具有 System.Uri 参数的对应方法重载。 |
|
特性的字符串文本参数不能正确解析为 URL、GUID 或版本。 |