はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】SourceGenerator(RoslynAnalyzer)で独自警告やエラーを作成した際にでる「RS2008: 規則を含むアナライザープロジェクトのアナライザーリリース追跡を有効にしてください」の対応方法

はじめに

SourceGeneratorで独自警告を実装していた際に、以下のような警告をRiderが表示してきました。

RS2008: 規則を含むアナライザープロジェクトのアナライザーリリース追跡を有効にしてください

警告が出ている様子

この対処法について調べたので書き残しておこうと思います。

概要

Analyzerがどのバージョンでリリースされたか・リリース予定かを記述することが推奨されています。

Release tracking analyzer enables third party analyzer packages to define analyzer releases with associated versions.

// DeepL翻訳
リリース追跡アナライザーは、サードパーティ製アナライザー・パッケージがアナライザーのリリースと関連バージョンを定義できるようにします。

github.com

例えば.NET Foundation入りしてMSの中の人が管理しているMessagePack-CSharpでも、その設定ファイルがあります。
github.com
github.com

対応方法

ファイルを用意する

プロジェクト直下に以下の2ファイルを配置します。

  • AnalyzerReleases.Shipped.md
  • AnalyzerReleases.Unshipped.md

また.csprojでそれを読み込むようにします。

<ItemGroup>
    <None Remove="AnalyzerReleases.Shipped.md" />
    <None Remove="AnalyzerReleases.Unshipped.md" />
</ItemGroup>

<ItemGroup>
    <AdditionalFiles Include="AnalyzerReleases.Shipped.md" />
    <AdditionalFiles Include="AnalyzerReleases.Unshipped.md" />
</ItemGroup>

リリース前のAnalyzerとリリース後のAnalyzerを記述する

以下のファイルにそれぞれのAnalyzerの情報を書き込みます。

  • AnalyzerReleases.Shipped.md : リリース済のAnalyzerを記述
  • AnalyzerReleases.Unshipped.md : 未リリースのAnalyzerを記述

AnalyzerReleases.Shipped.md

## Release 1.0

### New Rules

Rule ID | Category | Severity | Notes
--------|----------|----------|--------------------
CA1000  |  Design  |  Warning | CA1000_AnalyzerName, [Documentation](CA1000_Documentation_Link)
CA2000  | Security |  Info    | CA2000_AnalyzerName, [Documentation](CA2000_Documentation_Link)
CA3000  |  Usage   | Disabled | CA3000_AnalyzerName, [Documentation](CA3000_Documentation_Link)


## Release 2.0

### New Rules

Rule ID | Category | Severity | Notes
--------|----------|----------|--------------------
CA4000  |  Design  |  Warning | CA4000_AnalyzerName, [Documentation](CA4000_Documentation_Link)

### Removed Rules

Rule ID | Category | Severity | Notes
--------|----------|----------|--------------------
CA3000  |  Usage   |  Disable | CA3000_AnalyzerName, [Documentation](CA3000_Documentation_Link)

### Changed Rules

Rule ID | Category | Severity | Notes
--------|----------|----------|--------------------
CA2000  | Security | Disabled | CA2000_AnalyzerName, [Documentation](CA2000_Documentation_Link)

AnalyzerReleases.Unshipped.md

### New Rules

Rule ID | Category | Severity | Notes
--------|----------|----------|--------------------
CA5000  | Security |  Warning | CA5000_AnalyzerName
CA6000  |  Design  |  Warning | CA6000_AnalyzerName

そしてリリースをしたタイミングでAnalyzerReleases.Unshipped.mdからAnalyzerReleases.Shipped.mdに移動させる必要があります。忘れずにやりましょう。