除了配置严重性外,代码质量规则还有其他配置选项。 例如,可以将每个代码质量分析器配置为仅应用于代码库的特定部分。 通过向指定规则严重性和常规编辑器首选项的同一个 EditorConfig 文件添加键值对,可指定这些选项。
注意
本文不详细说明如何配置规则的严重性。 用于设置规则严重性的 .editorconfig 选项与此处描述的选项 () 具有不同的前缀 (dotnet_diagnostic
)dotnet_code_quality
。 此外,此处描述的选项仅适用于代码质量规则,而严重性选项也适用于代码样式规则。 作为快速参考,可以使用以下选项语法配置规则的严重性:
dotnet_diagnostic.<rule ID>.severity = <severity value>
然而,有关配置规则严重性的详细信息,请参阅严重性级别。
选项作用域
每个优化选项都可以针对所有规则、某个规则类别(例如“安全性”或“设计”)或某个特定规则进行配置。
┮Τ砏玥
若要为所有规则配置选项,请使用下面的语法:
语法 | 示例 |
---|---|
dotnet_code_quality。<OptionName> = <OptionValue> | dotnet_code_quality.api_surface = public |
<OptionName>
的值列在选项下。
规则类别
若要为某个规则类别配置选项,请使用下面的语法:
语法 | 示例 |
---|---|
dotnet_code_quality。<RuleCategory>。<OptionName> = OptionValue | dotnet_code_quality.Naming.api_surface = public |
下表列出了 <RuleCategory>
的可用值。
Design
Documentation
Globalization
Interoperability
Maintainability
Naming
Performance
SingleFile
Reliability
Security
Usage
特定规则
若要为某个特定规则配置选项,请使用下面的语法:
语法 | 示例 |
---|---|
dotnet_code_quality。<RuleId>。<OptionName> = <OptionValue> | dotnet_code_quality.CA1040.api_surface = public |
选项
本部分列出了代码分析器可用的配置选项。 有关详细信息,请参阅 分析器配置。
- 额外枚举无名称
- 附加继承排除符号名称
- 附加所需通用接口
- 附加必需后缀
- 附加使用结果方法
- 额外的字符串格式化方法
- 允许的后缀
- 分析过的符号种类
- api_surface
- 假定方法枚举参数
- 数据流分析选项
- 不允许的符号名称
- 在pre_net5目标上启用平台分析器
- enum_values_prefix_trigger
- 枚举方法
- 排除_AspNet_Core_Mvc_ControllerBase
- 排除间接基类型
- 排除结构体
- exclude_async_void_methods(排除异步空方法)
- 排除扩展方法的this参数
- 排除或默认方法
- 排除单字母类型参数
- 排除的符号名称
- 排除类型名称及派生类型
- ignore_internalsvisibleto
- linq_chain_methods
- 空值检查验证方法
- 输出_类型
- 指向分析种类
- required_modifiers
- 尝试自动确定其他字符串格式化方法
- 不安全_DllImportSearchPath_bits
- use_naming_heuristic
api_surface
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
要分析 API 图面的哪个部分 |
public (适用于 public 和 protected API)internal 或 friend (适用于 internal 和 private protected API)private (适用于 private API)all (适用于所有 API)用逗号 (,) 分隔多个值 |
public |
CA1000CA1002CA1003CA1005CA1008CA1010CA1012CA1021CA1024CA1027CA1028CA1030CA1036CA1040CA 1041CA1043CA1044CA1045CA1046CA1047CA1051CA1052CA1054CA1055CA1056CA1058CA1062CA1063CA1068CA1070CA1700CA1700 CA1707CA1708CA1710CA1711CA1714CA1715CA1716CA1717CA1720CA1721CA1725CA1801CA1802CA1815 CA1819CA1822CA1859CA22208CA2217CA2225 CA2225CA2226CA2231CA2234 |
排除异步无返回值的方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
是否忽略不返回值的异步方法 | true false |
false |
CA2007 |
注意
早期版本中将此选项命名为 skip_async_void_methods
。
排除单字母类型参数
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
是否从规则中排除单字符的类型参数,例如,S 中的 Collection<S> |
true false |
false |
CA1715 |
注意
早期版本中将此选项命名为 allow_single_letter_type_parameters
。
输出类型
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定应分析项目中生成此程序集类型的代码 |
OutputKind 枚举的一个或多个字段 用逗号 (,) 分隔多个值 |
所有输出种类 | CA1515CA2007 |
必需修饰符
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定应分析的 API 所需的修饰符 | 以下允许的修饰符表中的一个或多个值 用逗号 (,) 分隔多个值 |
取决于每个规则 | CA1802 |
允许的修饰符 | 总结 |
---|---|
none |
无修饰符要求 |
static 或 Shared |
必须声明为 static (在 Visual Basic 中为 Shared ) |
const |
必须声明为 const |
readonly |
必须声明为 readonly |
abstract |
必须声明为 abstract |
virtual |
必须声明为 virtual |
override |
必须声明为 override |
sealed |
必须声明为 sealed |
extern |
必须声明为 extern |
async |
必须声明为 async |
排除扩展方法的this参数
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
是否跳过对扩展方法的 this 参数的分析 |
true false |
false |
CA1062 |
空值检查验证方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
null 检查验证方法的名称,这些方法用于确定传递给方法的参数不是 null | 允许的方法名称格式(以 | 分隔): - 仅方法名称(包括具有相应名称的所有方法,不考虑包含的类型或命名空间) - 完全限定的名称,使用符号的文档 ID 格式,前缀为 M: (可选) |
无 | CA1062 |
附加字符串格式化方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
其他字符串格式设置方法的名称 | 允许的方法名称格式(以 | 分隔): - 仅方法名称(包括具有相应名称的所有方法,不考虑包含的类型或命名空间) - 完全限定的名称,使用符号的文档 ID 格式,前缀为 M: (可选) |
无 | CA2241 |
排除的派生类型名称
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
类型的名称,用于将类型及其所有派生类型从分析范围内排除 | 允许的符号名称格式(以 | 分隔): - 仅类型名称(包括具有相应名称的所有类型,不考虑包含的类型或命名空间) - 完全限定的名称,使用符号的文档 ID 格式,前缀为 T: (可选) |
无 | CA1001CA1054CA1055CA1056CA1062CA1068CA1303CA1304CA1305CA1508CA2000CA2100CA2301CA2302CA2311CA2312CA2321CA2322CA2327CA2328CA2329CA2330CA3001CA3002CA3003CA3004CA3005CA3006CA3007CA3008CA3009CA3010CA3011CA3012CA5361CA5376CA5377CA5380CA5381CA5382CA5383CA5384CA5387CA5388CA5389CA5390CA5399CA5400 |
被排除的符号名称
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
从分析范围排除的符号的名称 | 允许的符号名称格式(以 | 分隔): - 仅符号名称(包括具有相应名称的所有符号,不考虑包含的类型或命名空间) - 完全限定的名称,使用符号的文档 ID 格式 每个符号名称都需要带有一个符号类型前缀,例如表示方法的 M: 前缀、表示类型的 T: 前缀,以及表示命名空间的 N: 前缀。- .ctor 表示构造函数,.cctor 表示静态构造函数 |
无 | CA1001CA1054CA1055CA1056CA1062CA1068CA1303CA1304CA1305CA1508CA2000CA2100CA2301CA2302CA2311CA2312CA2321CA2322CA2327CA2328CA2329CA2330CA3001CA3002CA3003CA3004CA3005CA3006CA3007CA3008CA3009CA3010CA3011CA3012CA5361CA5376CA5377CA5380CA5381CA5382CA5383CA5384CA5387CA5388CA5389CA5390CA5399CA5400 |
不允许的符号名称
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
不允许出现在分析上下文中的符号的名称 | 允许的符号名称格式(以 | 分隔): - 仅符号名称(包括具有相应名称的所有符号,不考虑包含的类型或命名空间) - 完全限定的名称,使用符号的文档 ID 格式 每个符号名称都需要带有一个符号类型前缀,例如表示方法的 M: 前缀、表示类型的 T: 前缀,以及表示命名空间的 N: 前缀。- .ctor 表示构造函数,.cctor 表示静态构造函数 |
无 | CA1031 |
exclude_ordefault_methods
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
从分析中排除 FirstOrDefault 和 LastOrDefault 方法。 |
true 或 false |
false |
CA1826 |
ignore_internalsvisibleto
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
在分析中包括标有 InternalsVisibleToAttribute 的程序集。 |
true 或 false |
true |
CA1812CA1852 |
试图自动确定附加的字符串格式化方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
布尔选项,用于启用启发式检测其他字符串格式设置方法。 如果方法具有 string format 参数且后跟 params object[] 参数,则该方法被视为字符串格式设置方法。 |
true 或 false |
false |
CA2241 |
不安全_Dll导入搜索路径_位
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
配置 DllImportSearchPath 的哪个值对于分析是不安全的 |
System.Runtime.InteropServices.DllImportSearchPath 的整数值 |
770 (即:AssemblyDirectory | UseDllDirectoryForDependencies | ApplicationDirectory ) |
CA5393 |
不包含_aspnet_core_mvc控制器基类
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
考虑 CSRF 时排除 ASP.NET Core MVC ControllerBase |
true 或 false |
true |
CA5391 |
枚举值前缀触发器
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定要触发枚举值命名规则的阈值 |
-
AnyEnumValue - 如果任意枚举值以枚举类型名称开头,则会触发此规则。
- AllEnumValues - 如果所有枚举值均以枚举类型名称开头,则会触发此规则。
- Heuristic - 使用默认 FxCop 启发式(即至少 75% 的枚举值以枚举类型名称开头)触发规则。 |
Heuristic |
CA1712 |
排除间接基础类型
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
排除间接基类型 |
true 或 false |
true |
CA1710 |
额外必需后缀
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定其他所需的后缀 | 类型名称(用 | 分隔)及其所需后缀(用 -> 分隔)的列表。 允许的类型名称格式:- 仅类型名称(包括具有相应名称的所有类型,不考虑包含的类型或命名空间)。 - 完全限定的名称,使用符号的文档 ID 格式,前缀为 T: (可选)。 |
无 | CA1710 |
附加必需的通用接口
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定其他所需的泛型接口 | 接口名称(用 | 分隔)及其所需的通用完全限定接口(用 -> 分隔)的列表。 允许的接口格式:- 仅接口名称(包括具有相应名称的所有接口,不考虑包含的类型或命名空间)。 - 完全限定的名称,使用符号的文档 ID 格式,前缀为 T: (可选)。 |
无 | CA1010 |
示例:
选项值 | 总结 |
---|---|
dotnet_code_quality.CA1010.additional_required_generic_interfaces = ISomething->System.Collections.Generic.IEnumerable`1 |
所有实现 ISomething 的类型,无论其名称空间如何,都应该实现 System.Collections.Generic.IEnumerable\`1 。 |
dotnet_code_quality.CA1010.additional_required_generic_interfaces = T:System.Collections.IDictionary->T:System.Collections.Generic.IDictionary`2 |
所有实现 System.Collections.IDictionary 类型都应同时实现 System.Collections.Generic.IDictionary`2 。 |
额外继承排除的符号名称
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定要从继承层次结构树中排除的类型或命名空间 | 允许的类型名称格式: - 类型或命名空间名称(包括具有名称的所有类型,不考虑包含的类型或命名空间,以及其命名空间包含名称的所有类型)。 - 以通配符结尾的类型或命名空间名称(包括名称以给定名称开头的所有类型,不考虑包含的类型或命名空间,以及其命名空间包含名称的所有类型)。 - 完全限定的名称,使用符号的文档 ID 格式,使用可选 T: 前缀代表类型,或者使用 N: 前缀代表命名空间。
- 完全限定的名称或命名空间名称,使用可选 T: 前缀代表类型,或使用 N: 前缀代表命名空间,且以通配符结尾(包括其完全限定名称以给定类型名称开头的所有类型,或其完全限定名称以给定命名空间名称开头的所有类型)。 |
N:System.* (此值始终自动添加到提供的值) |
CA1501 |
分析符号类型
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定要分析的符号类型 | 以逗号分隔列表表示的一个或多个 SymbolKind 字段。 | Namespace, NamedType, Method, Property, Event, Parameter |
CA1716 |
use_naming_heuristic
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
配置包含 Text 、Message 或 Caption 的参数或属性名称是否会触发此规则 |
true 或 false |
false |
CA1303 |
额外使用结果方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定必须使用其结果的其他自定义 API | 其他方法的名称(用 | 分隔)。 允许的方法名称格式: - 仅方法名称(包括具有相应名称的所有方法,不考虑包含类型或命名空间)。 - 完全限定的名称,使用符号的文档 ID 格式,前缀为 M: (可选)。 |
无 | CA1806 |
允许的后缀
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定允许的后缀 | 允许的后缀列表(用 | 分隔)。 | 无 | CA1711 |
启用预NET5目标平台分析器
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定是否为 .NET 5 之前的 TFM 启用分析 |
true 或 false |
false |
CA1416 |
排除结构体
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定是否从分析中排除结构 |
true 或 false |
false |
CA1051 |
附加枚举无名称
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
为零值枚举字段指定其他允许的名称 | 其他名称列表(用 | 分隔)。 | 无 | CA1008 |
枚举方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定枚举 IEnumerable 的其他自定义方法 | 其他方法的完全限定名称(用 | 分隔)。 | 无 | CA1851 |
LINQ链式方法
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定其他自定义 LINQ 链方法(即接收 IEnumerable 参数并返回新的 IEnumerable 实例的方法) |
其他方法的完全限定名称(用 | 分隔)。 | 无 | CA1851 |
假设方法枚举参数
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定是否假定自定义方法枚举其 IEnumerable 参数 |
true 或 false |
false |
CA1851 |
数据流分析选项
本节中的选项配置数据流分析规则。 选项包括:
- 处理分析类型
- 处置_构造函数内所有权转移
- 在方法调用处处置所有权转移
- 跨过程分析类型
- 最大跨过程lambda或本地函数调用链
- 最大跨过程方法调用链
- 复制分析
- 足够的迭代次数_用于弱KDF算法
有关数据流分析的详细信息,请参阅 编写基于数据流分析的分析器。
处理分析类型
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定要分析哪些路径存在释放冲突 |
-
AllPaths - 跟踪和报告所有路径(非异常和异常路径)上丢失的释放冲突。 此外,还会标记使用不推荐的释放模式,该模式可能导致潜在释放泄漏。
- AllPathsOnlyNotDisposed - 跟踪和报告所有路径(非异常和异常路径)上丢失的释放冲突。 不标记使用可能导致潜在释放泄漏的不推荐的释放模式。
- NonExceptionPaths - 仅在非异常程序路径上跟踪和报告丢失的释放冲突。 此外,还会标记使用不推荐的释放模式,该模式可能导致潜在释放泄漏。
- NonExceptionPathsOnlyNotDisposed - 仅在非异常程序路径上跟踪和报告丢失的释放冲突。 不标记使用可能导致潜在释放泄漏的不推荐的释放模式。 |
NonExceptionPaths |
CA2000 |
处置_所有权转移_在构造函数中
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
为传递给构造函数调用的参数配置释放所有权转移 |
true 或 false |
false |
CA2000 |
处置_方法调用时的所有权转移
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
为作为参数传递给方法调用的可释放对象配置释放所有权转移 |
true 或 false |
false |
CA2000 |
过程间分析类型
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定是否对源方法调用执行程序间分析 |
None 、NonContextSensitive 、ContextSensitive |
特定于每个可配置规则 | CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |
最大跨过程方法调用链
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定用于程序间数据流分析的最大方法调用链长度 | 无符号整数 | 3 | CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |
最大跨过程lambda或本地函数调用链
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定用于程序间数据流分析的最大 lambda 或本地函数调用链长度 | 无符号整数 | 3 | CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |
指针分析类型
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定是否执行 PointsToAnalysis |
None 、PartialWithoutTrackingFieldsAndProperties 、Complete |
特定于每个规则 | CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |
复制分析
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
指定是否执行复制分析(跟踪值和引用拷贝) |
true 或 false |
true 适用于大多数规则 |
CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |
弱 KDF 算法的足够迭代次数
描述 | 允许的值 | 默认值 | 可配置的规则 |
---|---|---|---|
使用较弱的密钥派生函数(KDF)算法时配置足够的迭代计数 | 整数 | 100000 适用于大多数规则 | CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |