程式碼品質規則組態選項
除了設定嚴重性之外,「程式碼品質」規則還有其他組態選項。 例如,每個程式碼品質分析器都可以設定為只套用至程式碼基底的特定部分。 您可以將索引鍵/值組新增至 EditorConfig 檔案來指定這些選項,該檔案也是您指定規則嚴重性和一般編輯器喜好設定的位置。
注意
本文不會詳細說明如何設定規則的嚴重性。
.editorconfig 選項,可設定規則的嚴重性,其前置詞(dotnet_diagnostic
)與這裡所述的選項不同(dotnet_code_quality
)。 此外,此處所述的選項僅適用於程式碼品質規則,但嚴重性選項還適用於程式碼樣式規則。 作為快速參考,您可以使用下列選項語法來設定規則的嚴重性:
dotnet_diagnostic.<rule ID>.severity = <severity value>
不過,如需設定規則嚴重性的詳細資訊,請參閱嚴重性等級。
選項範圍
每個精簡選項都可以針對所有規則、某個類別的規則 (例如「安全性」或「設計」) 或特定規則進行設定。
所有規則
針對「所有」規則設定選項的語法如下:
語法 | 範例 |
---|---|
dotnet_code_quality.<選項名稱> = <選項值> | dotnet_code_quality.api_surface = public |
某個類別的規則
針對某個「類別」的規則設定選項的語法如下:
語法 | 範例 |
---|---|
dotnet_code_quality.<規則類別>.<選項名稱> = 選項值 | dotnet_code_quality.Naming.api_surface = public |
下表列出 <RuleCategory>
的可用值。
Design
Documentation
Globalization
Interoperability
Maintainability
Naming
Performance
SingleFile
Reliability
Security
Usage
特定規則
針對「特定」規則設定選項的語法如下:
語法 | 範例 |
---|---|
dotnet_code_quality.<規則識別碼>.<選項名稱> = <選項值> | dotnet_code_quality.CA1040.api_surface = public |
選項。
本節列出程式代碼分析器的可用組態選項。 如需詳細資訊,請參閱 Analyzer 組態。
- additional_enum_none_names
- additional_inheritance_excluded_symbol_names
- additional_required_generic_interfaces
- additional_required_suffixes
- additional_use_results_methods
- additional_string_formatting_methods
- allowed_suffixes
- analyzed_symbol_kinds
- api_surface
- assume_method_enumerates_parameters
- 數據流分析選項
- disallowed_symbol_names
- enable_platform_analyzer_on_pre_net5_target
- enum_values_prefix_trigger
- enumeration_methods
- exclude_aspnet_core_mvc_controllerbase
- exclude_indirect_base_types
- exclude_structs
- exclude_async_void_methods
- exclude_extension_method_this_parameter
- exclude_ordefault_methods
- exclude_single_letter_type_parameters
- excluded_symbol_names
- excluded_type_names_with_derived_types
- ignore_internalsvisibleto
- linq_chain_methods
- null_check_validation_methods
- output_kind
- 指向分析類型
- required_modifiers
- try_determine_additional_string_formatting_methods_automatically
- unsafe_DllImportSearchPath_bits
- use_naming_heuristic
api_surface
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
要分析的 API 介面部分 |
public (適用於 public 及 protected API)internal 或 friend (適用於 internal 及 private protected API)private (適用於 private API)all (適用於所有 API)以逗號 (,) 分隔多個值 |
public |
CA1000CA1002CA1003CA1005CA1008CA1010CA1012CA1021CA1024CA1027CA1028CA1030CA1036CA1040CA1041CA1043CA1044CA1045CA1046CA1047CA1051CA1052CA1054CA1055CA1056CA1058fCA1063CA1068CA1070CA1700CA1707CA1708CA1710CA1711CA1714CA1715CA1716CA1717CA1720CA1721CA1725CA1801CA1802CA1815CA1819CA1822CA1859CA2208CA2217CA2225CA2226CA2231CA2234 |
exclude_async_void_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
是否忽略未傳回值的非同步方法 | true false |
false |
CA2007 |
注意
此選項在舊版中的名稱為 skip_async_void_methods
。
exclude_single_letter_type_parameters
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
是否要從規則中排除單一字元型別參數,例如 S 中的 Collection<S> |
true false |
false |
CA1715 |
注意
此選項在舊版中的名稱為 allow_single_letter_type_parameters
。
output_kind
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定應分析專案中產生此類型組件的程式碼 |
OutputKind 列舉的一或多個欄位 以逗號 (,) 分隔多個值 |
所有輸出種類 | CA2007 |
required_modifiers
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定 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 |
exclude_extension_method_this_parameter
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
是否略過延伸模組方法的 this 參數分析 |
true false |
false |
CA1062 |
null_check_validation_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
驗證傳遞至方法的引數為非 Null 的 Null 檢查驗證方法名稱 | 允許的方法名稱格式 (以 | 分隔): - 僅方法名稱 (包含具有該名稱的所有方法,無論包含類型或命名空間為何) - 符號文件識別碼格式的完整名稱,可選擇性地在前面加上 M: |
無 | CA1062 |
additional_string_formatting_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
其他字串格式方法的名稱 | 允許的方法名稱格式 (以 | 分隔): - 僅方法名稱 (包含具有該名稱的所有方法,無論包含類型或命名空間為何) - 符號文件識別碼格式的完整名稱,可選擇性地在前面加上 M: |
無 | CA2241 |
excluded_type_names_with_derived_types
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
要在分析中排除本身類型及其所有衍生類型的類型名稱 | 允許的符號名稱格式 (以 | 分隔): - 僅類型名稱 (包含具有該名稱的所有類型,無論包含類型或命名空間為何) - 符號文件識別碼格式的完整名稱,可選擇性地在前面加上 T: |
無 | CA1001CA1054CA1055CA1056CA1062CA1068CA1303CA1304CA1305CA1508CA2000CA2100CA2301CA2302CA2311CA2312CA2321CA2322CA2327CA2328CA2329CA2330CA3001CA3002CA3003CA3004CA3005CA3006CA3007CA3008CA3009CA3010CA3011CA3012CA5361CA5376CA5377CA5378CA5380CA5381CA5382CA5383CA5384CA5387CA5388CA5389CA5390CA5399CA5400 |
excluded_symbol_names
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
要在分析中排除的符號名稱 | 允許的符號名稱格式 (以 | 分隔): - 僅符號名稱 (包含具有該名稱的所有符號,無論包含類型或命名空間為何) - 符號文件識別碼格式的完整名稱。 每個符號名稱都需要符號種類前置詞,例如 M: 代表方法、T: 代表類型,而 N: 則代表命名空間。- .ctor 代表建構函式,而 .cctor 則代表靜態建構函式 |
無 | CA1001CA1054CA1055CA1056CA1062CA1068CA1303CA1304CA1305CA1508CA2000CA2100CA2301CA2302CA2311CA2312CA2321CA2322CA2327CA2328CA2329CA2330CA3001CA3002CA3003CA3004CA3005CA3006CA3007CA3008CA3009CA3010CA3011CA3012CA5361CA5376CA5377CA5378CA5380CA5381CA5382CA5383CA5384CA5387CA5388CA5389CA5390CA5399CA5400 |
disallowed_symbol_names
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
分析內容中不允許的符號名稱 | 允許的符號名稱格式 (以 | 分隔): - 僅符號名稱 (包含具有該名稱的所有符號,無論包含類型或命名空間為何) - 符號文件識別碼格式的完整名稱。 每個符號名稱都需要符號種類前置詞,例如 M: 代表方法、T: 代表類型,而 N: 則代表命名空間。- .ctor 代表建構函式,而 .cctor 則代表靜態建構函式 |
無 | CA1031 |
exclude_ordefault_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
從分析中排除 FirstOrDefault 和 LastOrDefault 方法。 |
true 或 false |
false |
CA1826 |
ignore_internalsvisibleto
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
包括在分析中標示 InternalsVisibleToAttribute 的組件。 |
true 或 false |
true |
CA1812CA1852 |
try_determine_additional_string_formatting_methods_automatically
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
布林值選項,可啟用其他字串格式方法的啟發學習偵測。 如果方法具有 string format 參數,後面接著 params object[] 參數,則會將方法視為字串格式方法。 |
true 或 false |
false |
CA2241 |
unsafe_DllImportSearchPath_bits
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
設定 DllImportSearchPath 的哪個值對於分析不安全 |
System.Runtime.InteropServices.DllImportSearchPath 的整數值 |
770 (即 AssemblyDirectory | UseDllDirectoryForDependencies | ApplicationDirectory ) |
CA5393 |
exclude_aspnet_core_mvc_controllerbase
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
考慮 CSRF 時排除 ASP.NET Core MVC ControllerBase |
true 或 false |
true |
CA5391 |
enum_values_prefix_trigger
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定要觸發列舉值命名規則的閾值 |
-
AnyEnumValue - 如果 任何 列舉值的開頭是列舉型別名稱,就會觸發規則。
- AllEnumValues - 如果 所有 列舉值的開頭是都是列舉型別名稱,就會觸發規則。
- Heuristic - 系統會使用預設 FxCop 啟發學習法觸發規則 (也就是至少 75% 的列舉值開頭是列舉型別名稱時)。 |
Heuristic |
CA1712 |
exclude_indirect_base_types
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
排除間接基底類型 |
true 或 false |
true |
CA1710 |
additional_required_suffixes
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定其他必要的尾碼 | 類型名稱清單 (以 | 分隔) 及其必要的尾碼 (以 -> 分隔)。 允許的類型名稱格式:- 僅限類型名稱 (包含該名稱的所有類型,無論包含的類型或命名空間為何)。 - 以符號的文件識別碼為格式的完整名稱,具有選用的 T: 首碼。 |
無 | CA1710 |
additional_required_generic_interfaces
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定其他必要的泛型介面 | 介面名稱的清單 (以 | 分隔),當中包含其必要的泛型完整介面 (以 -> 分隔)。 允許的介面格式:- 僅限介面名稱 (包括包含名稱的所有介面,無論包含的類型或命名空間為何)。 - 以符號的文件識別碼為格式的完整名稱,具有選用的 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 。 |
additional_inheritance_excluded_symbol_names
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定要從繼承階層樹狀結構中排除的類型或命名空間 | 允許的類型名稱格式: - 類型或命名空間名稱 (包含該名稱的所有類型,無論包含的類型或命名空間為何,以及命名空間包含名稱的所有類型)。 - 以萬用字元符號結尾的類型或命名空間名稱 (包括名稱開頭為指定名稱的所有類型,不論包含類型或命名空間爲何,以及命名空間包含名稱的所有類型)。 - 以符號的文件識別碼為格式的完整名稱,具有類型選用的 T: 首碼或命名空間選用的 N: 首碼。
- 以符號的文件識別碼為格式的完整名稱,具有類型選用的 T: 首碼或命名空間選用的 N: 首碼,並以萬用字元符號結尾 (包括其完整名稱以指定類型名稱開頭的所有類型,或其完整名稱以指定命名空間名稱開頭的所有類型)。 |
N:System.* (此值一律會自動新增至所提供的值) |
CA1501 |
analyzed_symbol_kinds
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定要分析的符號種類 | 一或多個 SymbolKind 欄位做為逗號分隔清單。 | Namespace, NamedType, Method, Property, Event, Parameter |
CA1716 |
use_naming_heuristic
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
設定參數或屬性名稱包含 Text 、Message 或 Caption 的項目是否會觸發此規則 |
true 或 false |
false |
CA1303 |
additional_use_results_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定必須使用其結果的其他自訂 API | 其他方法的名稱 (以 | 分隔)。 允許的方法名稱格式: - 僅限方法名稱 (包含具有該名稱的所有方法,無論包含的類型或命名空間為何)。 - 以符號的文件識別碼為格式的完整名稱,具有選用的 M: 首碼。 |
無 | CA1806 |
allowed_suffixes
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定允許的尾碼 | 允許尾碼的清單 (以 | 分隔)。 | 無 | CA1711 |
enable_platform_analyzer_on_pre_net5_target
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定是否要在 .NET 5 之前啟用 TTFM 的分析 |
true 或 false |
false |
CA1416 |
exclude_structs
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定是否要從分析中排除結構 |
true 或 false |
false |
CA1051 |
additional_enum_none_names
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定零值列舉欄位的其他允許名稱 | 其他名稱的清單 (以 | 分隔)。 | 無 | CA1008 |
enumeration_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定列舉 IEnumerable 的其他自訂方法 | 其他方法的完整名稱 (以 | 分隔)。 | 無 | CA1851 |
linq_chain_methods
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定其他自訂的 LINQ 鏈結方法 (即方法會採用 IEnumerable 引數並傳回新的 IEnumerable 執行個體) |
其他方法的完整名稱 (以 | 分隔)。 | 無 | CA1851 |
assume_method_enumerates_parameters
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定是否要假設自訂方法會列舉其 IEnumerable 參數 |
true 或 false |
false |
CA1851 |
數據流分析選項
本節中的選項會設定數據流分析規則。 選項包括:
- dispose_analysis_kind
- dispose_ownership_transfer_at_constructor
- dispose_ownership_transfer_at_method_call
- 插間程序分析種類
- max_interprocedural_lambda_or_local_function_call_chain
- 最大跨程序方法呼叫链
- 拷貝分析
- 弱KDF演算法的足夠迭代次數
如需資料串流分析的詳細資訊,請參閱 撰寫資料串流分析型分析器。
dispose_analysis_kind
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定要分析以處置違規的路徑 |
-
AllPaths - 追蹤和報告所有路徑上遺失的處置違規(非例外狀況和例外狀況路徑)。 此外,也標記使用可能導致潛在處置流失的非建議處置模式。
- AllPathsOnlyNotDisposed - 追蹤和報告所有路徑上遺失的處置違規 (非例外狀況和例外狀況路徑)。 請勿標記使用可能導致潛在處置流失的非建議處置模式。
- NonExceptionPaths - 只追蹤和報告非例外狀況程式路徑上遺失的處置違規。 此外,也標記使用可能導致潛在處置流失的非建議處置模式。
- NonExceptionPathsOnlyNotDisposed - 只追蹤和報告非例外狀況程式路徑上遺失的處置違規。 請勿標記使用可能導致潛在處置流失的非建議處置模式。 |
NonExceptionPaths |
CA2000 |
dispose_ownership_transfer_at_constructor
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
針對傳遞至建構函式引動過程的引數設定處置擁有權轉移 |
true 或 false |
false |
CA2000 |
dispose_ownership_transfer_at_method_call
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
針對當做引數傳遞至方法呼叫的可處置物件設定處置擁有權轉移 |
true 或 false |
false |
CA2000 |
跨程序分析類型
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定是否要針對源方法調用執行跨程序分析 |
None 、NonContextSensitive 、ContextSensitive |
每個可配置規則的特性 | CA1062、CA1303、CA1508、CA2000、CA2100、CA22213 |
max_interprocedural_method_call_chain
描述 | 允許的值 | 預設值 | 可設定的規則 |
---|---|---|---|
指定要分析之跨程序數據流分析的方法呼叫鏈結長度上限 | 不帶正負號的整數 | 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 |