托管代码的“扩展的更正规则”规则集

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

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

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

规则

说明

CA1001

那自己可支配领域类型应该是一次性的

CA1009

正确声明事件处理程序

CA1016

用AssemblyVersionAttribute标记组件

CA1033

接口方法能由子类可调用

CA1049

拥有本机资源的类型应该是一次性的

CA1060

移动P/Invokes 到 NativeMethods类

CA1061

不要隐藏基类方法

CA1063

正确实现IDisposable

CA1065

不提高在意外的位置异常

CA1301

避免重复加速器

CA1400

P / Invoke入口点应该存在

CA1401

P/Invokes应该是不可见

CA1403

自动布局类型不应该是COM可见

CA1404

P / Invoke后立即调用GetLastError

CA1405

COM可见类型的基类型应该是COM可见

CA1410

COM注册方法应该匹配

CA1415

正确声明P/Invokes

CA1821

移除空的终结

CA1900

值类型字段应该是便携的

CA1901

P/Invoke 声明应为可移植声明

CA2002

不要锁定具有弱标识的对象

CA2100

检查SQL查询的安全漏洞

CA2101

指定封送处理的P / Invoke字符串参数

CA2108

审查的声明性安全上的值类型

CA2111

指针应该是不可见

CA2112

有保证的类型不应公开栏

CA2114

方法的安全性应该是类型的一个超集

CA2116

APTCA方法应该只调用APTCA方法

CA2117

APTCA类型应该只延长APTCA基本类型

CA2122

不要使用链接请求间接公开方法

CA2123

重写的链接请求应与基相同

CA2124

裹在外层的try脆弱的finally子句

CA2126

类型链接请求需要继承要求

CA2131

安全关键类型可能不参与类型等价

CA2132

默认构造函数必须至少与基类型默认构造函数一样关键

CA2133

委托必须绑定到具有一致透明度的方法

CA2134

重写基方法时,方法必须保持一致的透明度

CA2137

透明方法必须只包含可验证的IL

CA2138

透明方法不得调用与SuppressUnmanagedCodeSecurity属性的方法

CA2140

透明代码不得引用安全关键项

CA2141

透明方法不得满足LinkDemands

CA2146

类型必须至少与其基类型和接口一样关键

CA2147

透明方法不得使用安全断言

CA2149

透明方法不能调用本地代码

CA2200

重新抛出保存堆栈的详细信息

CA2202

不要多次释放对象

CA2207

以内联方式初始化值类型的静态字段

CA2212

不要使用 WebMethod 标记服务组件

CA2213

应释放可释放的字段

CA2214

不要调用构造函数重写的方法

CA2216

可释放类型应声明终结器

CA2220

终结器应调用基类的终结器

CA2229

实现序列化构造函数

CA2231

重写 ValueType.Equals 时应重载相等运算符

CA2232

使用 STAThread 标记 Windows 窗体的入口点

CA2235

标记所有不可序列化的字段

CA2236

对 ISerializable 的类调用基类方法

CA2237

以 SerializableAttribute 标记 ISerializable 类型

CA2238

正确实现序列化方法

CA2240

正确实现 ISerializable

CA2241

为格式化方法提供正确的参数

CA2242

正确测试NaN

CA1008

枚举应该具有0值

CA1013

重载加法方法和减法方法时重载相等运算符

CA1303

不要将文本作为本地化参数传递

CA1308

将字符串规范化为大写

CA1806

不要忽略方法结果

CA1816

正确调用 GC.SuppressFinalize

CA1819

属性不应返回数组

CA1820

测试使用字符串长度的空字符串

CA1903

仅使用目标框架中的 API

CA2004

移除对 GC.KeepAlive 的调用

CA2006

使用 SafeHandle 封装本机资源

CA2102

在常规处理程序中捕捉非 CLSCompliant 异常

CA2104

不要声明只读可变引用类型

CA2105

数组字段不应为只读

CA2106

保护断言

CA2115

使用本机资源时调用 GC.KeepAlive

CA2119

密封满足私有接口的方法

CA2120

保护序列化构造函数

CA2121

静态构造函数应为私有

CA2130

安全关键常量应是透明的

CA2205

Win32 API的使用管理等同

CA2215

Dispose 方法应调用基类的 Dispose

CA2221

终结应受到保护

CA2222

不要降低继承成员的可见性

CA2223

成员应该超过返回类型不同

CA2224

重写equals超载运算符等号

CA2226

运算符应有对称重载

CA2227

集合属性应该是只读

CA2239

提供反序列化方法可选字段

CA1032

实施标准异常构造

CA1054

URI参数不应为字符串

CA1055

URI返回值不应是字符串

CA1056

URI属性不应是字符串

CA1057

字符串的URI重载调用的System.Uri重载

CA1402

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

CA1406

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

CA1407

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

CA1408

请不要使用 AutoDual ClassInterfaceType

CA1409

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

CA1411

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

CA1412

将 ComSource 接口标记为 IDispatch

CA1413

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

CA1414

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

CA1600

不要使用 Idle 进程优先级

CA1601

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

CA1824

用 NeutralResourcesLanguageAttribute 标记程序集

CA2001

避免调用有问题的方法

CA2003

不要将纤程视为线程

CA2135

级别 2 程序集不应包含 LinkDemand

CA2136

成员不应有相互冲突的透明度注释

CA2139

透明方法不能使用 HandleProcessCorruptingExceptions 特性

CA2142

不应使用 LinkDemand 保护透明代码

CA2143

透明方法不应使用安全要求

CA2144

透明代码不应从字节数组加载程序集

CA2145

不应使用 SuppressUnmanagedCodeSecurityAttribute 修饰透明方法

CA2204

文字应该正确的拼写

CA2211

非常数区域应该是不可见

CA2217

不要使用FlagsAttribute标记枚举

CA2218

重写 Equals 时重写 GetHashCode

CA2219

在异常子句中不引发异常

CA2225

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

CA2228

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

CA2230

使用PARAMS的可变参数

CA2233

运算不应溢出

CA2234

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

CA2243

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