成果物の出力レイアウト
.NET 8 以降のバージョンには、ビルド出力の出力パスとフォルダー構造を簡略化するオプションがあります。 すべてのプロジェクトからのビルド出力はすべて、プロジェクトで区切られた共通の場所に収集されます。 共通の場所を使用すると、ツールで出力を見つける場所を簡単に予測できます。
既定では、共通の場所は、Directory.build.props ファイルの横にある artifacts という名前のディレクトリです。 ルートの artifacts フォルダーの下のフォルダー構造は次のとおりです。
📁 artifacts
└──📂 <Type of output>
└──📂 <Project name>
└──📂 <Pivot>
次の表は、フォルダー構造内の各レベルの既定値を示しています。 値と既定の場所は、Directory.build.props ファイル内のプロパティを使用してオーバーライドできます。
フォルダー レベル | 説明 | 例 |
---|---|---|
出力の種類 | ビルド出力のカテゴリ (バイナリ、中間/生成されたファイル、発行済みアプリケーション、NuGet パッケージなど)。 | bin , obj , publish , package |
プロジェクト名 | 出力をプロジェクトごとに分離します。 | MyApp |
Pivot | 異なる構成、ターゲット フレームワーク、ランタイム識別子のプロジェクトのビルドを区別します。 複数の要素が必要な場合、それらをアンダースコア (_ ) で結合します。 ArtifactsPivots MSBuild プロパティを使用してカスタマイズできます。 |
debug , debug_net8.0 , release , release_linux-x64 |
例
次の表は、作成される可能性のあるパスの例を示しています。
Path | 説明 |
---|---|
artifacts\bin\MyApp\debug | dotnet build を実行時の単純なプロジェクトのビルド出力パス。 |
artifacts\obj\MyApp\debug | dotnet build を実行時の単純なプロジェクトの中間出力パス。 |
artifacts\bin\MyApp\debug_net8.0 | マルチターゲット プロジェクトの net8.0 ビルドのビルド出力パス。 |
artifacts\publish\MyApp\release_linux-x64 | linux-x64 の発行時の単純なアプリの発行パス。 |
artifacts\package\MyApp\release | プロジェクトのリリース .nupkg が作成されるフォルダー。 |
構成方法
一元化された出力パス形式にオプトインするには、次のいずれかの MSBuild プロパティを Directory.Build.props ファイルに追加します。
既定の出力場所を使用する場合は、
UseArtifactsOutput
プロパティをtrue
に設定します。<PropertyGroup> <UseArtifactsOutput>true</UseArtifactsOutput> </PropertyGroup>
カスタム出力場所を設定するには、値が
$(MSBuildThisFileDirectory)artifacts
のArtifactsPath
プロパティ (またはフォルダーの場所を指定するプロパティ) を追加します。 Directory.Build.props ファイルがまだない場合は、次のコマンドを実行して、ArtifactsPath
プロパティを含むファイルを自動的に生成できます。dotnet new buildprops --use-artifacts
生成されたファイルは次のようになります。
<Project> <PropertyGroup> <ArtifactsPath>$(MSBuildThisFileDirectory)artifacts</ArtifactsPath> </PropertyGroup> </Project>
"pivot" フォルダー名の既定値は、ターゲット フレームワーク モニカー (TFM)、構成、ランタイム識別子 (RID) の組み合わせです。 存在しないものはすべて省略されます。 "pivot" フォルダーの名前付け方法をカスタマイズするには、ArtifactsPivots
MSBuild プロパティを目的の文字列に設定します。 次に例を示します。
<PropertyGroup>
...
<ArtifactsPivots>$(ArtifactsPivots)_MyCustomPivot</ArtifactsPivots>
</PropertyGroup>
.NET