托管代码的“基本更正规则”规则集
基本更正规则规则集侧重于使用 framework API 时的逻辑错误和常见错误。“基本更正规则”包括“Microsoft 最少量建议规则”规则集中的规则。有关更多信息,请参见 托管代码的“托管建议规则”规则集。应加入此规则集以扩展最少量建议规则所报告的警告列表。
下表介绍了“Microsoft 基本更正规则”规则集中的所有规则。
规则 |
说明 |
---|---|
那自己可支配领域类型应该是一次性的 |
|
正确声明事件处理程序 |
|
用AssemblyVersionAttribute标记组件 |
|
接口方法能由子类可调用 |
|
拥有本机资源的类型应该是一次性的 |
|
移动P/Invokes 到 NativeMethods类 |
|
不要隐藏基类方法 |
|
正确实现IDisposable |
|
不提高在意外的位置异常 |
|
避免重复加速器 |
|
P / Invoke入口点应该存在 |
|
P/Invokes应该是不可见 |
|
自动布局类型不应该是COM可见 |
|
P / Invoke后立即调用GetLastError |
|
COM可见类型的基类型应该是COM可见 |
|
COM注册方法应该匹配 |
|
正确声明P/Invokes |
|
移除空的终结 |
|
值类型字段应该是便携的 |
|
P/Invoke 声明应为可移植声明 |
|
不要锁定具有弱标识的对象 |
|
检查SQL查询的安全漏洞 |
|
指定封送处理的P / Invoke字符串参数 |
|
审查的声明性安全上的值类型 |
|
指针应该是不可见 |
|
有保证的类型不应公开栏 |
|
方法的安全性应该是类型的一个超集 |
|
APTCA方法应该只调用APTCA方法 |
|
APTCA类型应该只延长APTCA基本类型 |
|
不要使用链接请求间接公开方法 |
|
重写的链接请求应与基相同 |
|
裹在外层的try脆弱的finally子句 |
|
类型链接请求需要继承要求 |
|
安全关键类型可能不参与类型等价 |
|
默认构造函数必须至少与基类型默认构造函数一样关键 |
|
委托必须绑定到具有一致透明度的方法 |
|
重写基方法时,方法必须保持一致的透明度 |
|
透明方法必须只包含可验证的IL |
|
透明方法不得调用与SuppressUnmanagedCodeSecurity属性的方法 |
|
透明代码不得引用安全关键项 |
|
透明方法不得满足LinkDemands |
|
类型必须至少与其基类型和接口一样关键 |
|
透明方法不得使用安全断言 |
|
透明方法不能调用本地代码 |
|
重新抛出保存堆栈的详细信息 |
|
不要多次释放对象 |
|
以内联方式初始化值类型的静态字段 |
|
不要使用 WebMethod 标记服务组件 |
|
应释放可释放的字段 |
|
不要调用构造函数重写的方法 |
|
可释放类型应声明终结器 |
|
终结器应调用基类的终结器 |
|
实现序列化构造函数 |
|
重写 ValueType.Equals 时应重载相等运算符 |
|
使用 STAThread 标记 Windows 窗体的入口点 |
|
标记所有不可序列化的字段 |
|
对 ISerializable 的类调用基类方法 |
|
以 SerializableAttribute 标记 ISerializable 类型 |
|
正确实现序列化方法 |
|
正确实现 ISerializable |
|
为格式化方法提供正确的参数 |
|
正确测试NaN |
|
枚举应该具有0值 |
|
重载加法方法和减法方法时重载相等运算符 |
|
不要将文本作为本地化参数传递 |
|
将字符串规范化为大写 |
|
不要忽略方法结果 |
|
正确调用 GC.SuppressFinalize |
|
属性不应返回数组 |
|
测试使用字符串长度的空字符串 |
|
仅使用目标框架中的 API |
|
移除对 GC.KeepAlive 的调用 |
|
使用 SafeHandle 封装本机资源 |
|
在常规处理程序中捕捉非 CLSCompliant 异常 |
|
不要声明只读可变引用类型 |
|
数组字段不应为只读 |
|
保护断言 |
|
使用本机资源时调用 GC.KeepAlive |
|
密封满足私有接口的方法 |
|
保护序列化构造函数 |
|
静态构造函数应为私有 |
|
安全关键常量应是透明的 |
|
Win32 API的使用管理等同 |
|
Dispose 方法应调用基类的 Dispose |
|
终结应受到保护 |
|
不要降低继承成员的可见性 |
|
成员应该超过返回类型不同 |
|
重写equals超载运算符等号 |
|
运算符应有对称重载 |
|
集合属性应该是只读 |
|
提供反序列化方法可选字段 |