成果物の出力レイアウト

.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)artifactsArtifactsPath プロパティ (またはフォルダーの場所を指定するプロパティ) を追加します。 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>