代码质量规则配置选项

除了配置严重性外,代码质量规则还有其他配置选项。 例如,可以将每个代码质量分析器配置为仅应用于代码库的特定部分。 通过向指定规则严重性和常规编辑器首选项的同一个 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

描述 允许的值 默认值 可配置的规则
要分析 API 图面的哪个部分 public(适用于 publicprotected API)
internalfriend(适用于 internalprivate 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 无修饰符要求
staticShared 必须声明为 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

描述 允许的值 默认值 可配置的规则
从分析中排除 FirstOrDefaultLastOrDefault 方法。 truefalse false CA1826

ignore_internalsvisibleto

描述 允许的值 默认值 可配置的规则
在分析中包括标有 InternalsVisibleToAttribute 的程序集。 truefalse true CA1812CA1852

试图自动确定附加的字符串格式化方法

描述 允许的值 默认值 可配置的规则
布尔选项,用于启用启发式检测其他字符串格式设置方法。
如果方法具有 string format 参数且后跟 params object[] 参数,则该方法被视为字符串格式设置方法。
truefalse false CA2241

不安全_Dll导入搜索路径_位

描述 允许的值 默认值 可配置的规则
配置 DllImportSearchPath 的哪个值对于分析是不安全的 System.Runtime.InteropServices.DllImportSearchPath 的整数值 770(即:AssemblyDirectory | UseDllDirectoryForDependencies | ApplicationDirectory CA5393

不包含_aspnet_core_mvc控制器基类

描述 允许的值 默认值 可配置的规则
考虑 CSRF 时排除 ASP.NET Core MVC ControllerBase truefalse true CA5391

枚举值前缀触发器

描述 允许的值 默认值 可配置的规则
指定要触发枚举值命名规则的阈值 - AnyEnumValue - 如果任意枚举值以枚举类型名称开头,则会触发此规则
- AllEnumValues - 如果所有枚举值均以枚举类型名称开头,则会触发此规则
- Heuristic - 使用默认 FxCop 启发式(即至少 75% 的枚举值以枚举类型名称开头)触发规则。
Heuristic CA1712

排除间接基础类型

描述 允许的值 默认值 可配置的规则
排除间接基类型 truefalse 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

描述 允许的值 默认值 可配置的规则
配置包含 TextMessageCaption 的参数或属性名称是否会触发此规则 truefalse false CA1303

额外使用结果方法

描述 允许的值 默认值 可配置的规则
指定必须使用其结果的其他自定义 API 其他方法的名称(用 | 分隔)。 允许的方法名称格式:
- 仅方法名称(包括具有相应名称的所有方法,不考虑包含类型或命名空间)。
- 完全限定的名称,使用符号的文档 ID 格式,前缀为 M:(可选)。
CA1806

允许的后缀

描述 允许的值 默认值 可配置的规则
指定允许的后缀 允许的后缀列表(用 | 分隔)。 CA1711

启用预NET5目标平台分析器

描述 允许的值 默认值 可配置的规则
指定是否为 .NET 5 之前的 TFM 启用分析 truefalse false CA1416

排除结构体

描述 允许的值 默认值 可配置的规则
指定是否从分析中排除结构 truefalse false CA1051

附加枚举无名称

描述 允许的值 默认值 可配置的规则
为零值枚举字段指定其他允许的名称 其他名称列表(用 | 分隔)。 CA1008

枚举方法

描述 允许的值 默认值 可配置的规则
指定枚举 IEnumerable 的其他自定义方法 其他方法的完全限定名称(用 | 分隔)。 CA1851

LINQ链式方法

描述 允许的值 默认值 可配置的规则
指定其他自定义 LINQ 链方法(即接收 IEnumerable 参数并返回新的 IEnumerable 实例的方法) 其他方法的完全限定名称(用 | 分隔)。 CA1851

假设方法枚举参数

描述 允许的值 默认值 可配置的规则
指定是否假定自定义方法枚举其 IEnumerable 参数 truefalse false CA1851

数据流分析选项

本节中的选项配置数据流分析规则。 选项包括:

有关数据流分析的详细信息,请参阅 编写基于数据流分析的分析器

处理分析类型

描述 允许的值 默认值 可配置的规则
指定要分析哪些路径存在释放冲突 - AllPaths - 跟踪和报告所有路径(非异常和异常路径)上丢失的释放冲突。 此外,还会标记使用不推荐的释放模式,该模式可能导致潜在释放泄漏。
- AllPathsOnlyNotDisposed - 跟踪和报告所有路径(非异常和异常路径)上丢失的释放冲突。 不标记使用可能导致潜在释放泄漏的不推荐的释放模式。
- NonExceptionPaths - 仅在非异常程序路径上跟踪和报告丢失的释放冲突。 此外,还会标记使用不推荐的释放模式,该模式可能导致潜在释放泄漏。
- NonExceptionPathsOnlyNotDisposed - 仅在非异常程序路径上跟踪和报告丢失的释放冲突。 不标记使用可能导致潜在释放泄漏的不推荐的释放模式。
NonExceptionPaths CA2000

处置_所有权转移_在构造函数中

描述 允许的值 默认值 可配置的规则
为传递给构造函数调用的参数配置释放所有权转移 truefalse false CA2000

处置_方法调用时的所有权转移

描述 允许的值 默认值 可配置的规则
为作为参数传递给方法调用的可释放对象配置释放所有权转移 truefalse false CA2000

过程间分析类型

描述 允许的值 默认值 可配置的规则
指定是否对源方法调用执行程序间分析 NoneNonContextSensitiveContextSensitive 特定于每个可配置规则 CA1062CA1303CA1508CA2000CA2100CA22213

最大跨过程方法调用链

描述 允许的值 默认值 可配置的规则
指定用于程序间数据流分析的最大方法调用链长度 无符号整数 3 CA1062CA1303CA1508CA2000CA2100CA22213

最大跨过程lambda或本地函数调用链

描述 允许的值 默认值 可配置的规则
指定用于程序间数据流分析的最大 lambda 或本地函数调用链长度 无符号整数 3 CA1062CA1303CA1508CA2000CA2100CA22213

指针分析类型

描述 允许的值 默认值 可配置的规则
指定是否执行 PointsToAnalysis NonePartialWithoutTrackingFieldsAndPropertiesComplete 特定于每个规则 CA1062CA1303CA1508CA2000CA2100CA22213

复制分析

描述 允许的值 默认值 可配置的规则
指定是否执行复制分析(跟踪值和引用拷贝) truefalse true 适用于大多数规则 CA1062CA1303CA1508CA2000CA2100CA22213

弱 KDF 算法的足够迭代次数

描述 允许的值 默认值 可配置的规则
使用较弱的密钥派生函数(KDF)算法时配置足够的迭代计数 整数 100000 适用于大多数规则 CA1062CA1303CA1508CA2000CA2100CA22213