🗂

.NET csproj の PropertyGroupのプロパティについて(備忘録)

に公開1

.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