🗂
.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>
もいいですぞ?