🗂
.NET csproj の PropertyGroupのプロパティについて(備忘録)
.NET csproj の PropertyGroup 解説(サンプル付き)
.csproj ファイルは、.NET プロジェクトの「設計図」です。特に <PropertyGroup> 内のプロパティは、ビルドや実行の挙動を制御する重要な役割を持っています。
以下では、提示いただいたサンプルのプロパティを表形式で整理し、それぞれの意味を解説します。
プロパティ一覧表
| プロパティ名 | 設定値 | 説明 |
|---|---|---|
| TargetFramework | net9.0 |
使用する .NET のターゲットフレームワーク。例: net6.0, net8.0, net9.0。 |
| OutputType | Library |
出力形式を指定。Exe/WinExe は実行可能ファイル、Library は DLL として出力。 |
| Nullable | enable |
C# 8.0 以降の「null 許容参照型」を有効化。コード品質向上に役立つ。 |
| ImplicitUsings | enable |
主要な using を自動インポート。例: System, System.Linq など。コードの記述量を削減。 |
| CompressionEnabled | false |
ビルド時に静的ファイルを gzip などで圧縮する機能を無効化。Web プロジェクトで使われることが多い。 |
| GenerateStaticWebAssetsPropsFile | false |
静的 Web アセット用の Props ファイル生成を無効化。通常は SPA(React, Blazor など)連携に利用される。 |
| DisableStaticWebAssetsBuildPropsFileGeneration | true |
静的アセット用の Props ファイルをビルド時に生成しない。 |
| StaticWebAssetEnabled | false |
静的 Web アセット機能そのものを無効化。 |
| GenerateStaticWebAssets | false |
静的アセット関連のメタデータ生成を無効化。 |
| StaticWebAssetsCopyContentOnlyAssets | false |
コンテンツのみコピーする挙動を無効化。完全に静的アセット関連を排除。 |
| DisableFastUpToDateCheck | true |
MSBuild の「インクリメンタルビルド」機能を無効化。常にクリーンビルドを行う。デバッグ時に便利。 |
解説ポイント
1. ターゲットフレームワークの指定
.NET 9.0 を指定しているので、最新のランタイムや C# 言語機能を使えます。バージョンを変えると動作する API やパフォーマンスが変わる
2. 出力形式の違い
-
Exe→ コンソールアプリとして実行可能な.exe -
WinExe→ GUI アプリ(WPF/WinForms 用) -
Library→.dllとしてライブラリ化(他のプロジェクトから参照可能)
今回の設定では ライブラリ化(DLL 出力) を目的としています。
3. 静的 Web アセット関連を完全無効化
通常 ASP.NET Core Web プロジェクトでは、wwwroot に配置した静的ファイル(HTML, JS, CSS)が自動的に組み込まれます。
しかし、ライブラリとして組み込みたい場合や BFF(Backend for Frontend)のように API 専用にしたい場合は 不要 です。そのため、関連設定をすべて無効化しています。
4. インクリメンタルビルドの無効化
DisableFastUpToDateCheck=true により、毎回クリーンビルドされます。
これは以下のような場面で有効です:
- 静的ファイルや設定のキャッシュが残って正しく動かない場合
- 環境依存の動作を確実にリセットしたい場合
ただし、ビルド時間は増えるので 本番や CI では無効化しないほうが良い です。
まとめ
- csproj の
<PropertyGroup>は「プロジェクトのルール」を決める場所。
Discussion
<TargetFrameworks>もいいですぞ?