はじめに
本稿は、Visual Studio の C# のソリューションで多くのプロジェクトを管理している場合に、便利な設定を一括反映する方法の紹介です。
お勧めの設定内容は以下です。私のプロジェクトでは、次の2つの設定を全プロジェクトに反映しています。
- C# 8.0 を利用(2019年7月時点でC# 8.0はPreview版であるため、プロジェクトごとに設定が必要)
- 決定論的ビルドの有効化(同じソースコードから常に同じバイナリを生成する)
C# 8.0は以前の記事に書いた通りnull安全などで有効です。
決定論的ビルドは無条件で設定しておいた方が良い設定です。
(決定論的ビルドはVisual Studio 2017以降で新規作成した.NET StandardかCoreのプロジェクトはデフォルトで有効になっていますが、それ以外のプロジェクトはデフォルトで無効になっています)
手順
手順はとても簡単です。以下の文字列を書いたファイルを「Directory.Build.props」という名前でslnファイルと同じフォルダに格納します。
<Project>
<PropertyGroup>
<Deterministic>true</Deterministic>
<LangVersion>preview</LangVersion>
</PropertyGroup>
</Project>
解説
Directory.Build.propsに記述した内容は、格納したフォルダ以下のすべてのcsprojファイル(プロジェクトファイル)に自動的に反映されます。
<LangVersion>preview</LangVersion>
と記述すると、Preview版のC# 8.0が利用できるようになります。
<Deterministic>true</Deterministic>
と記述すると、決定論的ビルドが有効になります。これが無効のままだと、同じソースコードでもビルドした時刻によって異なるバイナリになります。これが有効であれば、ビルド結果のキャッシュが効きやすくなり、テスト実行が高速化されたりします。CI/CD 環境でのテストもおそらく早くなると思います。
詳細な解説については、以下のサイトを参照ください。
Directory.Build.propsについての詳細は以下参照。
Directory.Build.* | ++C++;
決定論的ビルドの詳細は以下参照。
C# で、同じソースコードから常に同じバイナリを生成する
まとめ
C#の全プロジェクトに便利な設定を一括反映する方法を紹介しました。
本稿の内容を活用して こちら のツールを作ったりしています。