はじめに
Aspire や Blazor を使用すると、1つのソリューションに複数のプロジェクトが含まれることが一般的です。このような場合、各プロジェクトで個別に警告設定を行うのは手間がかかります。本記事では、Directory.Build.props を使用してソリューション全体で警告設定を共有する方法について解説します。
プロジェクト単位の設定
通常、プロジェクトの .csproj ファイルに以下のような設定を追加します。
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers> <!-- CA系アナライザーを有効 -->
<AnalysisMode>Recommended</AnalysisMode> <!-- 推奨のアナライザーを有効 -->
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild> <!-- スタイル違反をビルドに反映 -->
<WarningLevel>5</WarningLevel>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
しかし、複数のプロジェクトがある場合、すべてのプロジェクトにこれを繰り返す必要があります。
解決策:Directory.Build.props を使用
すべてのプロジェクトに設定を適用する方法がデフォルトで用意されています。
重要なポイント:
- 設定をプロジェクト単位(.csproj)から ソリューションレベル に移動
- 細かい制御が必要な場合は .editorconfig に記載
実装手順
-
Directory.Build.props を作成
ソリューションルート(すべてのプロジェクトが入っているフォルダ)に
Directory.Build.propsファイルを新規作成します。 -
設定を記載
以下のコードをコピーして
Directory.Build.propsに貼り付けます。必ず<Project>タグと<PropertyGroup>タグで囲みます。
<Project>
<PropertyGroup>
<!-- .NET 公式 Roslyn Analyzers(CAxxxx)を有効化 -->
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<!-- 推奨レベルのアナライザーセットを有効 -->
<!-- 指定可能な値: None / Minimal / Recommended / All -->
<AnalysisMode>Recommended</AnalysisMode>
<!-- コードスタイル違反(IDE系)をビルド時にも評価 -->
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<!-- コンパイラ警告レベル(最大: 5) -->
<WarningLevel>5</WarningLevel>
<!-- XML ドキュメントコメントを生成(CS1591 等が有効化) -->
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
</Project>
各設定項目の説明
| 設定項目 | 説明 |
|---|---|
EnableNETAnalyzers |
.NET 公式の Roslyn Analyzers(CA 系)を有効化 |
AnalysisMode |
アナライザーセットのレベル。Recommended がバランスが良い |
EnforceCodeStyleInBuild |
IDE 系のコードスタイル違反をビルド時に評価 |
WarningLevel |
最大の警告レベルは 5 |
GenerateDocumentationFile |
XML ドキュメントコメント生成(未記載だと CS1591 警告) |
メリット
一元管理:設定を1か所で管理可能
保守性向上:新しいプロジェクト追加時に自動的に同じ設定が適用される
統一性確保:ソリューション全体で同じ警告レベルを強制
カスタマイズ例
特定のプロジェクトのみ異なる設定にしたい場合は、そのプロジェクトの .csproj で上書きできます。
<!-- 個別プロジェクトでの上書き例 -->
<PropertyGroup>
<AnalysisMode>All</AnalysisMode> <!-- より厳しいチェックに -->
</PropertyGroup>
さいごに
それぞれのプロジェクトで個別に設定するのではなく1か所で設定すれば全プロジェクトに反映することが可能です。また今回は警告出力を設定しましたがそれ以外の設定でも.csprojに記載している設定を全プロジェクトに一括で反映することが可能です。
この記事が皆様のコーディングライフの助けになれば幸いです。
参考