ビルド出力ディレクトリを変更する
(デバッグ、リリース、またはその両方の) 構成ごとにプロジェクトによって生成された出力の場所を指定できます。 既定の設定では、出力フォルダーはプロジェクト タイプと SDK によって異なり、一部のプロジェクトではプラットフォーム固有またはフレームワーク固有のサブフォルダーが使用されます。
Visual Studio には、プロジェクト フォルダーに対する相対パスを指定するか、ファイル システム内の任意の場所に絶対パスを指定して、中間出力と最終出力を格納するフォルダーをカスタマイズできるプロパティが用意されています。 Visual Studio プロジェクトのプロパティで指定した設定に加えて、プロジェクト ファイルの編集や、MSBuild と .NET SDK の機能の使用することで出力をさらにカスタマイズして、個々のプロジェクトまたは多くのプロジェクトのソリューション レベルで、プロジェクト出力のすべての側面を完全に制御することもできます。
ビルド出力ディレクトリを変更する
プロジェクトまたはソリューションをクリーンアップして、既存の出力ファイルを削除します (ソリューションのビルド>クリーン)。
プロジェクトのプロパティ ページを開くには、ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[プロパティ] を選択します。
プロジェクトの種類に基づいてタブを選択します。
- C# の場合、[ビルド] タブを選択します。
- Visual Basic の場合、[コンパイル] タブを選択します。
- C++ または JavaScript の場合、[全般] タブを選択します。
上部にある構成のドロップダウンで、出力ファイルの場所を変更する構成を選択します (デバッグ、リリース、またはすべての構成)。
ページで出力パス エントリを見つけます。これはプロジェクトの種類によって異なります。
- C# プロジェクトと JavaScript プロジェクトの出力パス
- Visual Basic プロジェクトのビルド出力パス
- Visual C++ プロジェクトの出力ディレクトリ
出力の生成先とするパスを入力するか (ルート プロジェクト ディレクトリの絶対パスまたは相対パス)、[参照] を選択し、そのフォルダーを参照します。
Note
一部のプロジェクト (.NET と ASP.NET Core) では、既定でフレームワーク バージョンまたはランタイム識別子がビルド パスに含まれます。 これを変更するには、ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[プロジェクト ファイルの編集] を選択して、以下を追加します。
<PropertyGroup> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> </PropertyGroup>
ヒント
指定した場所に出力が生成されない場合、Visual Studio のメニュー バーで選択し、該当する構成 (デバッグやリリースなど) を構築していることを確認してください。
共通出力ディレクトリへのビルド
既定では、Visual Studio は、ソリューションの各プロジェクトを、そのソリューション内の独自のフォルダーにビルドします。 プロジェクトのビルド出力パスを変更して、すべての出力を強制的に同じフォルダーに配置することができます。
すべてのソリューション出力を共通ディレクトリに配置するには
ソリューションをクリーンアップして既存の出力ファイルを削除します (ソリューションのビルド>クリーン)。
ソリューションのいずれかのプロジェクトをクリックします。
[プロジェクト] メニューの [プロパティ] をクリックします。
各プロジェクトで、その種類に応じて [コンパイル] または [ビルド] を選択し、[出力パス] または [基本出力パス] をソリューション内のすべてのプロジェクトで使用するフォルダーに設定します。
プロジェクトのプロジェクト ファイルを開き、1 つ目のプロパティ グループに以下のプロパティ宣言を追加します。
<PropertyGroup> <!-- existing property declarations are here --> <UseCommonOutputDirectory>true</UseCommonOutputDirectory> </PropertyGroup>
UseCommonOutputDirectory
をtrue
に設定することで、複数のプロジェクト出力を同じフォルダーに配置していることを Visual Studio とその基となるビルド エンジン (MSBuild) に伝え、プロジェクトが他のプロジェクトに依存している場合に通常発生するコピー手順を MSBuild で省略するようにします。ソリューションのすべてのプロジェクトに対して、手順 2 から 5 を繰り返します。 共通の出力ディレクトリを使ってはならない例外的なプロジェクトがある場合は、一部のプロジェクトをスキップすることができます。
プロジェクト (.NET プロジェクト) の中間出力ディレクトリを設定するには
プロジェクトをクリーンアップして、既存の出力ファイルがあれば削除します。
プロジェクト ファイルを開きます。
最初のプロパティ グループに次のプロパティ宣言を追加します。
<PropertyGroup> <!-- existing property declarations are here --> <IntermediateOutputPath>path</IntermediateOutputPath> </PropertyGroup>
パスはプロジェクト ファイルからの相対パスですが、絶対パスを使うこともできます。 パスにプロジェクト名を含める場合は、MSBuild プロパティ
$(MSBuildProjectName)
、$(MSBuildProjectDirectory)
を使って参照できます。 使用できるその他のプロパティについては、「MSBuild の予約済みおよび既知のプロパティ」を参照してください。Visual Studio でビルドすると、プロジェクト フォルダー以下に obj フォルダーが作成されますが、空です。 これはビルド処理の一環で削除することができます。 そのためには、次のコマンドを実行するビルド後イベントを追加する方法があります。
rd "$(ProjectDir)obj" /s /q
「カスタム ビルド イベントを指定する」を参照してください。
Visual Studio 2022 では、プロジェクトの種類により、プロジェクト デザイナーのユーザー インターフェイスが異なります。 C# .NET Framework およびすべての Visual Basic のプロジェクトでは従来の .NET プロジェクト デザイナーが使用されますが、C# .NET Core (および .NET 5 以降) のプロジェクトでは、現在の .NET プロジェクト デザイナーが使用されます。 C++ プロジェクトでは、独自のプロパティ ページのユーザー インターフェイスが使用されます。 このセクションの手順は、どのプロジェクト デザイナーを使用しているかによって異なります。
ビルド出力ディレクトリを変更する
この手順は、.NET Core または .NET 5 以降を対象とする Visual Studio 2022 の C# プロジェクトに適用されます。
プロジェクトまたはソリューションをクリーンアップして、既存の出力ファイルを削除します (ソリューションのビルド>クリーン)。
ソリューション エクスプローラーでプロジェクト ノードを右クリックして、[プロパティ] を選択します。
[ビルド] セクションを展開し、[出力] サブセクションまで下方向にスクロールします。
C# の基本出力パスを見つけ、出力の生成先とするパスを入力するか (ルート プロジェクト ディレクトリの絶対パスまたは相対パス)、代わりに [参照] を選択してそのフォルダーを参照します。 なお、実際の出力パスは、基本出力パスに構成名が追加され生成されます。
Note
一部のプロジェクト (.NET と ASP.NET Core) では、既定でフレームワーク バージョンまたはランタイム識別子が最終出力パスに含まれます。 これを変更するには、ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[プロジェクト ファイルの編集] を選択して、以下を追加します。
<PropertyGroup> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> </PropertyGroup>
共通出力ディレクトリへのビルド
既定では、Visual Studio は、ソリューションの各プロジェクトを、そのソリューション内の独自のフォルダーにビルドします。 プロジェクトのビルド出力パスを変更して、すべての出力を強制的に同じフォルダーに配置することができます。
ソリューションをクリーンアップして既存の出力ファイルを削除します (ソリューションのビルド>クリーン)。
ソリューションのいずれかのプロジェクトをクリックします。
[プロジェクト] メニューの [プロパティ] をクリックします。
各プロジェクトで、その種類に応じて [コンパイル] または [ビルド] を選択し、[出力パス] または [基本出力パス] をソリューション内のすべてのプロジェクトで使用するフォルダーに設定します。
プロジェクトのプロジェクト ファイルを開き、1 つ目のプロパティ グループに以下のプロパティ宣言を追加します。
<PropertyGroup> <!-- existing property declarations are here --> <UseCommonOutputDirectory>true</UseCommonOutputDirectory> </PropertyGroup>
UseCommonOutputDirectory
をtrue
に設定することで、複数のプロジェクト出力を同じフォルダーに配置していることを Visual Studio とその基となるビルド エンジン (MSBuild) に伝え、プロジェクトが他のプロジェクトに依存している場合に通常発生するコピー手順を MSBuild で省略するようにします。ソリューションのすべてのプロジェクトに対して、手順 2 から 5 を繰り返します。 共通の出力ディレクトリを使ってはならない例外的なプロジェクトがある場合は、一部のプロジェクトをスキップすることができます。
ヒント
指定した場所に出力が生成されない場合、Visual Studio のメニュー バーで選択し、該当する構成 (デバッグやリリースなど) を構築していることを確認してください。
プロジェクトの中間出力ディレクトリを設定する
この手順は、.NET Core または .NET 5 以降を対象とする Visual Studio 2022 の C# プロジェクトに適用されます。
プロジェクトをクリーンアップして、既存の出力ファイルがあれば削除します。
プロジェクト ファイルを開きます。
最初のプロパティ グループに次のプロパティ宣言を追加します。
<PropertyGroup> <!-- existing property declarations are here --> <IntermediateOutputPath>path</IntermediateOutputPath> </PropertyGroup>
パスはプロジェクト ファイルからの相対パスですが、絶対パスを使うこともできます。 パスにプロジェクト名を含める場合は、MSBuild プロパティ
$(MSBuildProjectName)
、$(MSBuildProjectDirectory)
を使って参照できます。 使用できるその他のプロパティについては、「MSBuild の予約済みおよび既知のプロパティ」を参照してください。Visual Studio でビルドすると、プロジェクト フォルダー以下に obj フォルダーが作成されますが、空です。 これはビルド処理の一環で削除することができます。 そのためには、次のコマンドを実行するビルド後イベントを追加する方法があります。
rd "$(ProjectDir)obj" /s /q
「カスタム ビルド イベントを指定する」を参照してください。
Directory.Build.props を使用して出力ディレクトリを設定する
プロジェクトの数が多く、それらすべてに対して出力フォルダーを変更する場合は、この記事で前述した方法を使用してそれぞれを変更するのは面倒でエラーが発生しやすくなります。 このような場合は、ソリューション フォルダーにファイル Directory.Build.props を作成して、ソリューション内のすべてのプロジェクトに適用する適切な MSBuild プロパティを 1 か所で設定できます。 この特定の名前のファイルを、対象とするすべてのプロジェクトの親フォルダーに配置することで、カスタマイズを 1 か所で簡単にメンテナンスし、値を簡単に変更できます。 「フォルダー別にビルドをカスタマイズする」を参照してください。
成果物を使用してビルド出力を整理する
.NET 8 プロジェクトでは、成果物機能を使用して、高度にカスタマイズ可能で柔軟な方法で出力を配置できます。 「成果物の出力レイアウト」を参照してください。