ルール セットを使用してコード分析規則をグループ化する

Visual Studio でコード分析を構成するときに、組み込みの "ルール セット" の一覧から選択できます。 ルール セットとは、そのプロジェクトの対象となる問題と特定の条件を示すコード分析規則のグループです。 たとえば、公開されている API のコードをスキャンすることを目的としたルール セットを適用できます。 また、使用可能なすべてのルールが含まれたルール セットを適用することもできます。

ルールを追加または削除したり、[エラー一覧] に警告またはエラーとして表示するためにルールの重大度を変更したりすることで、ルール セットをカスタマイズできます。 カスタマイズした規則セットで、特定の開発環境の要件を満たすことができます。 ルール セットをカスタマイズする場合、ルール セット エディターには、このプロセスで役立つ検索ツールとフィルター処理ツールが用意されています。

ルール セットは、マネージド コード分析マネージド コードのレガシ分析C++ コード分析に使用できます。

Note

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>