규칙 집합을 사용하여 코드 분석 규칙 그룹화

Visual Studio에서 코드 분석을 구성하는 경우 기본 제공 ‘규칙 집합’ 목록에서 선택할 수 있습니다. 규칙 집합은 대상 문제와 해당 프로젝트의 특정 조건을 식별하는 코드 분석 규칙 그룹입니다. 예를 들어, 공개적으로 사용 가능한 API 코드를 검사하도록 디자인된 규칙 집합을 적용할 수 있습니다. 사용 가능한 모든 규칙을 포함하는 규칙 집합을 적용할 수도 있습니다.

규칙을 추가 또는 삭제하거나 규칙 심각도를 변경하여 오류 목록에서 경고나 오류로 표시되도록 규칙 집합을 사용자 지정할 수 있습니다. 사용자 지정된 규칙 집합은 특정 개발 환경에 대한 요구 사항을 충족할 수 있습니다. 규칙 집합을 사용자 지정할 때 규칙 집합 편집기는 프로세스에서 도움이 되는 검색 및 필터링 도구를 제공합니다.

규칙 집합은 관리 코드 분석, 관리 코드의 레거시 분석, C++ 코드 분석에 사용할 수 있습니다.

참고 항목

Visual Studio 2019 버전 16.3부터 EditorConfig 파일을 사용하여 .NET 소스 코드 분석의 규칙을 구성할 수 있지만 레거시 분석의 규칙은 구성할 수 없습니다. 자세한 내용은 FAQ에서 EditorConfig와 규칙 집합 비교 섹션을 참조하세요.

규칙 집합 형식

규칙 집합은 .ruleset 파일에서 XML 형식으로 지정됩니다. ID와 ‘작업’으로 구성되는 규칙은 파일에서 분석기 ID와 네임스페이스로 그룹화됩니다.

.ruleset 파일의 콘텐츠는 다음 XML과 유사합니다.

<RuleSet Name="Rules for Hello World project" Description="These rules focus on critical issues for the Hello World app." ToolsVersion="10.0">
  <Localization ResourceAssembly="Microsoft.VisualStudio.CodeAnalysis.RuleSets.Strings.dll" ResourceBaseName="Microsoft.VisualStudio.CodeAnalysis.RuleSets.Strings.Localized">
    <Name Resource="HelloWorldRules_Name" />
    <Description Resource="HelloWorldRules_Description" />
  </Localization>
  <Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">
    <Rule Id="CA1001" Action="Warning" />
    <Rule Id="CA1009" Action="Warning" />
    <Rule Id="CA1016" Action="Warning" />
    <Rule Id="CA1033" Action="Warning" />
  </Rules>
  <Rules AnalyzerId="Microsoft.CodeQuality.Analyzers" RuleNamespace="Microsoft.CodeQuality.Analyzers">
    <Rule Id="CA1802" Action="Error" />
    <Rule Id="CA1814" Action="Info" />
    <Rule Id="CA1823" Action="None" />
    <Rule Id="CA2217" Action="Warning" />
  </Rules>
</RuleSet>

수동으로 하는 것보다 그래픽 규칙 집합 편집기에서 규칙 집합을 편집하는 것이 더 쉽습니다.

프로젝트에 대한 규칙 집합 지정

프로젝트에 대한 규칙 집합은 Visual Studio 프로젝트 파일에서 CodeAnalysisRuleSet 속성으로 지정됩니다. 예시:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <CodeAnalysisRuleSet>HelloWorld.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>