CSPROJ ファイル形式とは?
.csproj 拡張子を持つファイルは、デベロッパー ファイル カテゴリに属する C# プロジェクト ファイルです。
.csproj ファイルには何が含まれていますか?
.csproj ファイルの内容には、C# で記述されたプロジェクトのビルド設定が含まれています。これらは、新しいプロジェクトが作成されるときに Microsoft Visual Studio または .NET SDK コマンドライン ツールによって生成されます。.csproj ファイルでは、以下の情報を見つけることができます:
- プロジェクト名と出力タイプ(実行可能ファイルまたはクラス ライブラリ)
- プロジェクト ファイルへの参照、NuGet パッケージの依存関係(
<PackageReference>)、および他のプロジェクト参照 - コンパイル パラメータとターゲット フレームワーク(例:
net9.0やnet48) - バージョン番号や作成者情報などのアセンブリ メタデータ
.csproj ファイルの内容は XML マークアップを使用して記述されています。 モダンなプロジェクトでは、.NET Core および Visual Studio 2017 で導入されたコンパクトな SDK スタイル形式が使用されます。これは <Project Sdk="Microsoft.NET.Sdk"> で始まり、通常はわずか数行の長さです。ソースの .cs ファイル は、暗黙的なグロビング(globbing)を介して自動的に取得されます。2017 年以前の古いレガシー プロジェクトでは、明示的な xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 名前空間宣言を含む、より冗長な形式が使用され、すべてのソース ファイルが個別にリストされます。
.csproj ファイルは何に使用されますか?
.csproj ファイルを使用すると、数百のソース ファイルや外部依存関係で構成されることもある非常に複雑なプロジェクトのすべてのビルド パラメータを、1 つのドキュメントに保存できます。ビルド エンジンである MSBuild(または dotnet build CLI コマンド)は、.csproj を読み取ってプロジェクトをコンパイルします。.csproj ファイル内の情報は、異なるマシンや CI 環境間での一貫した動作も保証し、毎回コンパイル パラメータを指定する必要をなくします。1 つ以上の .csproj プロジェクトは、ソリューション ファイル(.sln または新しい .slnx)によってグループ化されます。
.csproj 自体にはソース コードは保持されていないことに注意してください。すべての C# コードは、それが参照する個別の .cs ファイル内に存在します。
.csproj ファイルを開くことはできますか?
.csproj ファイルは、新しいプロジェクトを作成するオプションを選択した後に自動的に生成されます。XML を使用して記述されているため、メモ帳などの最も単純なテキスト エディタでも表示や編集には十分です。ただし、XML の構文は厳格であることを覚えておく価値があります。明確な必要性がない限り、.csproj ファイルの変更は推奨されません。内容を不用意に変更すると、プロジェクト要素間の一貫性が失われ、Visual Studio やその他の開発ツールでプロジェクトを開く際に問題が発生する可能性があります。
セキュリティと安全性
リスク: MEDIUM.csproj ファイル自体はプレーンな XML であり、読み取るだけなら無害です。本当のリスクは、それを「ビルド」または「リストア」したときに発生します。C# プロジェクトは、MSBuild ターゲット、ビルド前後のスクリプト、NuGet パッケージのリストア(インストール スクリプトを実行可能)、ソース ジェネレーター、およびデバッグ/実行時のコンパイル済みコードを実行できます。そのため、信頼できないプロジェクトを開いてビルドや実行を押すと、任意のコードが実行される可能性があります。Visual Studio がダウンロードされたプロジェクトに対して信頼のプロンプトを表示するのは、まさにこの理由からです。ビルドする前に、見慣れない .csproj のターゲット、パッケージ参照、スクリプトを検査し、信頼できないコードはビルドしないでください。
形式の詳細
概要CSPROJ ファイルを開くプログラム
技術的詳細
詳細仕様| ファイル構造 | <Project> ルート要素を含み、その中に <PropertyGroup>、<ItemGroup>、およびオプションで <Target> 子要素を持つ XML |
| プロジェクト形式の種類 | SDK スタイル(.NET Core / VS 2017 以降):コンパクトで、Sdk 属性と暗黙的な *.cs グロビングを使用。レガシー フルフレームワーク:冗長で、すべてのソース ファイルを明示的にリストし、xmlns 2003 スキーマを使用 |
| SDK 属性 | <Project Sdk="Microsoft.NET.Sdk"> は、すべてのモダンな SDK スタイル プロジェクトを開始させます。バリアントには Microsoft.NET.Sdk.Web (ASP.NET Core) や Microsoft.NET.Sdk.Worker が含まれます |
| ターゲット フレームワーク宣言 | <TargetFramework> 要素はコンパイル ターゲット(例:net9.0、net48、netstandard2.0)を指定します。<TargetFrameworks>(セミコロン区切り)は、1 つのファイルでマルチターゲットを有効にします |
| NuGet 依存関係の宣言 | <ItemGroup> 内の <PackageReference Include="PackageName" Version="x.y.z" /> 要素。古い packages.config アプローチを置き換えます |
| プロジェクト間参照 | <ProjectReference Include="../Other/Other.csproj" /> 要素。MSBuild がビルド順序と依存関係グラフを自動的に解決します |
| ソース ファイルの包含 (SDK スタイル) | 暗黙的 - プロジェクト ディレクトリ下のすべての *.cs ファイルは、明示的な <Compile> エントリなしで自動的にコンパイルされます |
| 出力タイプ | Exe(コンソール アプリケーション)、WinExe(Windows GUI)、Library(クラス ライブラリまたは NuGet パッケージ)。<OutputType> プロパティを介して設定されます |
| ビルド エンジン | MSBuild - 直接、または .NET SDK CLI から dotnet build、dotnet run、dotnet publish を介して呼び出されます |
| テキスト エンコーディング | UTF-8 プレーン テキスト。バイナリ シグネチャやマジック バイトはありません。BOM はオプションであり、ほとんどのモダンなツールでは省略されます |
| 典型的なファイル サイズ | SDK スタイル プロジェクトの場合は 1 KB 未満。多くの明示的なファイル エントリを持つ大規模なレガシー フルフレームワーク プロジェクトの場合は最大約 50 KB |
| MIME タイプ | application/xml(text/xml または text/plain としても受け入れられます) |
| 関連ファイル | .csproj.user は、ユーザーごとのマシン固有の IDE 設定(デバッグ開始引数など)を保存し、バージョン管理にコミットすべきではありません |
| ソリューションのグループ化 | 1 つ以上の .csproj プロジェクトが、IDE およびマルチプロジェクト CLI ビルドのために .sln または新しい .slnx ソリューション ファイルに統合されます |
| 対応するプロジェクト形式 | .vbproj (Visual Basic .NET) および .fsproj (F#) は同じ MSBuild XML スキーマを使用し、同じソリューション内に共存できます |
| リリース日 | 2002 (Visual Studio .NET / .NET Framework 1.0) |
| 最新バージョン | SDK-style project format (since .NET Core / VS 2017, 2017); current with .NET 9 (2024) |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | learn.microsoft.com |
CSPROJ の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。CSPROJ ファイルについて最初の質問をしてみましょう。
よくある質問
CSPROJ ファイルを開くにはどうすればよいですか?
Visual Studio なしで CSPROJ ファイルを開けますか?
なぜ CSPROJ ファイルの中にコードがないのですか?
CSPROJ と SLN ファイルの違いは何ですか?
SDK スタイルとレガシーな CSPROJ の違いは何ですか?
<Project Sdk="Microsoft.NET.Sdk"> で始まり、短く、ソース ファイルを自動的に含めます。レガシー形式(2017 年以前、.NET Framework)は、すべてのファイルと参照を明示的にリストするため、非常に長くなります。dotnet CLI を使用して、レガシーから SDK スタイルへの移行を支援できます。