次の方法で共有


MSBuild

Microsoft ビルド エンジンは、アプリケーションを構築するためのプラットフォームです。 MSBuild とも呼ばれるこのエンジンは、ビルド プラットフォームがソフトウェアを処理およびビルドする方法を制御するプロジェクト ファイルの XML スキーマを提供します。 Visual Studio では MSBuild が使用されますが、MSBuild は Visual Studio に依存しません。 プロジェクトまたはソリューション ファイルで msbuild.exe または dotnet ビルド 呼び出すことで、Visual Studio がインストールされていない環境で製品を調整およびビルドできます。

Visual Studio では、MSBuild を使用してマネージド プロジェクトを読み込んでビルドします。 Visual Studio のプロジェクト ファイル (.csproj.vbproj.vcxprojなど) には、IDE でプロジェクトをビルドするときに実行される MSBuild XML コードが含まれています。 Visual Studio プロジェクトは、一般的な開発作業を行うために必要なすべての設定とビルド プロセスをインポートしますが、Visual Studio 内から、またはテキスト エディターを使用して、それらを拡張または変更できます。

Visual Studio を持たない Windows システムに MSBuild をインストールするには、ダウンロード ページBuild Tools for Visual Studio に移動します。 この方法で MSBuild をインストールすると、MSBuild.exe

.NET Core および .NET 5 以降の場合、MSBuild と同等の機能を得るもう 1 つの方法は、.NET SDKをインストールすることです。 .NET ビルド コマンド dotnet build は、macOS、Windows、または Linux 上の .NET SDK で使用できます。 .NET ビルド コマンド dotnet build は、.NET Core バージョンの MSBuild.exeの薄いラッパーです。 MSBuild を使用する .NET Core コマンド ライン インターフェイス (CLI)を使用して、.NET Core および .NET 5 以降を対象とするプロジェクトをビルドできます。

Visual Studio 2022 以降では、Visual Studio でビルドするときに、64 ビット バージョンの MSBuild が使用されます。

C++ 用 MSBuild の詳細については、「MSBuild (C++)を参照してください。

次の例は、Visual Studio IDE ではなくコマンド ラインから MSBuild を呼び出してビルドを実行する場合を示しています。

  • Visual Studio がインストールされていません。

  • あなたは 64 ビット バージョンの MSBuild を使用しようとしており、Visual Studio 2019 またはそれ以前のバージョンを使用しています。 通常、このバージョンの MSBuild は不要ですが、MSBuild はより多くのメモリにアクセスできます。

  • 複数のプロセスでビルドを実行する場合。 ただし、IDE を使用して、C++ と C# のプロジェクトで同じ結果を得ることができます。

  • ビルド システムを変更する必要があります。 たとえば、次のアクションを有効にすることができます。

    • コンパイラに到達する前にファイルを前処理します。

    • ビルド出力を別の場所にコピーします。

    • ビルド出力から圧縮ファイルを作成します。

    • 後処理手順を実行します。 たとえば、アセンブリに別のバージョンのスタンプを付ける場合があります。

Visual Studio IDE ではコードを記述できますが、MSBuild を使用してビルドを実行できます。 別の方法として、開発用コンピューター上の IDE でコードをビルドし、コマンド ラインから MSBuild を実行して、ソース リポジトリから複数の開発者のコラボレーションと統合されたコードをビルドすることもできます。

手記

Azure Pipelines を使用して、アプリケーションを自動的にコンパイル、テスト、デプロイできます。 ビルド システムでは、開発者がコードをチェックインするとき (継続的インテグレーション戦略の一部として) またはスケジュールに従ってビルドを自動的に実行できます (夜間ビルド検証テスト ビルドなど)。 Azure Pipelines は、MSBuild を使用してコードをコンパイルします。 詳細については、「Azure Pipelines」を参照してください。

Windows 上の MSBuild の入門チュートリアルについては、「チュートリアル: MSBuildの使用」を参照してください。

コマンド プロンプトで MSBuild を使用する

コマンド プロンプトで MSBuild を実行するには、プロジェクト ファイルを適切なコマンド ライン オプションと共に MSBuild.exeに渡します。 コマンド ライン オプションを使用すると、プロパティの設定、特定のターゲットの実行、ビルド プロセスを制御するその他のオプションの設定を行うことができます。 たとえば、次のコマンド ライン構文を使用して、Configuration プロパティを Debugに設定して MyProj.proj ファイルをビルドします。

MSBuild.exe MyProj.proj -property:Configuration=Debug

MSBuild はファイル拡張子に基づいて動作を変更しませんが、規則として、"プロジェクト ファイル" と呼ばれるメインの MSBuild 入力ファイルに対して、.csproj.vcxproj.vbprojなどの proj で終わる拡張子を使用します。

MSBuild コマンド ライン オプションの詳細については、「コマンドライン リファレンス」を参照してください。

重要

プロジェクトをダウンロードする前に、コードの信頼性を判断します。

.NET Core および .NET 5 以降では、通常、dotnet build を使用して MSBuild を呼び出します。 「dotnet build」を参照してください。 Visual Studio または Visual Studio ビルド ツールではなく、.NET SDK のみをインストールする場合は、dotnet build経由でのみ MSBuild を使用できます。

コマンド ライン dotnet build --help には、MSBuild.exeのすべてのオプションではなく、dotnet buildに固有のコマンド ライン オプションが一覧表示されますが、MSBuild コマンド ライン リファレンスに記載されているすべてのコマンド ライン オプションを引き続き使用できます。 dotnet build によって処理されないオプションは、MSBuild に渡されます。

プロジェクト ファイル

MSBuild は、単純で拡張可能な XML ベースのプロジェクト ファイル形式を使用します。 MSBuild プロジェクト ファイル形式を使用すると、開発者は、ビルドする項目と、異なるオペレーティング システムや構成用にビルドする方法を記述できます。 さらに、プロジェクト ファイル形式を使用すると、開発者は、製品内の異なるプロジェクト間でビルドを一貫して実行できるように、個別のファイルに組み込むことができる再利用可能なビルド ルールを作成できます。

Visual Studio ビルド システムは、プロジェクト固有のロジックをプロジェクト ファイル自体に格納し、インポートされた MSBuild XML ファイルと、.props.targets などの拡張機能を使用して標準ビルド ロジックを定義します。 .props ファイルは MSBuild プロパティを定義し、.targets ファイルは MSBuild ターゲットを定義します。 これらのインポートは Visual Studio プロジェクト ファイルに表示されることがありますが、.NET Core、.NET 5、.NET 6 プロジェクトなどの新しいプロジェクトでは、プロジェクト ファイルにインポートが表示されません。代わりに、次のような SDK リファレンスが表示されます。

<Project Sdk="Microsoft.Net.Sdk">

これらは SDK スタイルのプロジェクトと呼ばれます。 .NET SDK などの SDK を参照する場合、.props ファイルと .target ファイルのインポートは SDK によって暗黙的に指定されます。

次のセクションでは、MSBuild プロジェクト ファイル形式の基本的な要素について説明します。 基本的なプロジェクト ファイルを作成する方法のチュートリアルについては、「チュートリアル: MSBuild プロジェクト ファイルをゼロから作成する」を参照してください。

特性

プロパティは、ビルドの構成に使用できるキーと値のペアを表します。 プロパティは、PropertyGroup 要素の子としてプロパティの名前を持つ要素を作成することによって宣言されます。 たとえば、次のコードでは、Buildの値を持つ BuildDir という名前のプロパティを作成します。

<PropertyGroup>
    <BuildDir>Build</BuildDir>
</PropertyGroup>

要素に Condition 属性を配置することで、条件付きでプロパティを定義できます。 条件が trueに評価されない限り、条件要素の内容は無視されます。 次の例では、Configuration プロパティがまだ定義されていない場合に定義されます。

<Configuration  Condition=" '$(Configuration)' == '' ">DefaultValue</Configuration>

プロパティは、$(<PropertyName>) 構文を使用して、プロジェクト ファイル全体で参照できます。 たとえば、$(BuildDir)$(Configuration)を使用して、前の例のプロパティを参照できます。

プロパティの詳細については、「msBuild プロパティ を参照してください。

項目

項目はビルド システムへの入力であり、通常はファイルを表します。 項目は、ユーザー定義の項目名に基づいて項目の種類にグループ化されます。 これらの項目の種類は、個々の項目を使用してビルド プロセスの手順を実行するタスクのパラメーターとして使用できます。

項目は、ItemGroup 要素の子として項目の種類の名前を持つ要素を作成することによって、プロジェクト ファイルで宣言されます。 たとえば、次のコードでは、2 つのファイルを含む Compileという名前の項目の種類を作成します。

<ItemGroup>
    <Compile Include = "file1.cs"/>
    <Compile Include = "file2.cs"/>
</ItemGroup>

項目の種類は、@(<ItemType>) 構文を使用して、プロジェクト ファイル全体で参照できます。 たとえば、例の項目の種類は、@(Compile)を使用して参照されます。

MSBuild では、要素と属性の名前は大文字と小文字が区別されます。 ただし、プロパティ名、項目名、およびメタデータ名は含まれません。 次の例では、項目の種類 CompilecomPile、または他のケースのバリエーションを作成し、その項目の種類に値 "one.cs;two.cs" を指定します。

<ItemGroup>
  <Compile Include="one.cs" />
  <Compile Include="two.cs" />
</ItemGroup>

項目はワイルドカード文字を使用して宣言でき、より高度なビルド シナリオ用の追加のメタデータを含めることができます。 アイテムの詳細については、「項目の」を参照してください。

用事

タスクは、MSBuild プロジェクトがビルド操作を実行するために使用する実行可能コードの単位です。 たとえば、タスクによって入力ファイルがコンパイルされたり、外部ツールが実行されたりすることがあります。 タスクは再利用でき、異なるプロジェクトの異なる開発者が共有できます。

タスクの実行ロジックはマネージド コードで記述され、UsingTask 要素を使用して MSBuild にマップされます。 ITask インターフェイスを実装するマネージド型を作成することで、独自のタスクを作成できます。 タスクの記述方法の詳細については、「タスクの書き込み」を参照してください。

MSBuild には、要件に合わせて変更できる一般的なタスクが含まれています。 たとえば、ファイルをコピー コピー、ディレクトリを作成する MakeDir 、Visual C# ソース コード ファイルをコンパイルする Csc などです。 使用可能なタスクの一覧と使用状況情報については、「タスク リファレンス」を参照してください。

タスクは、タスクの名前を持つ要素を Target 要素の子として作成することによって、MSBuild プロジェクト ファイルで実行されます。 タスクは通常、要素の属性として渡されるパラメーターを受け入れます。 MSBuild プロパティと項目の両方をパラメーターとして使用できます。 たとえば、次のコードは、MakeDir タスクを呼び出し、前の例で宣言した BuildDir プロパティの値を渡します。

<Target Name="MakeBuildDirectory">
    <MakeDir  Directories="$(BuildDir)" />
</Target>

タスクの詳細については、「タスクの」を参照してください。

ターゲット

タスクを特定の順序でグループ化し、プロジェクト ファイルのセクションをビルド プロセスへのエントリ ポイントとして公開します。 多くの場合、ターゲットは論理的なセクションにグループ化され、読みやすさが向上し、拡張が可能になります。 ビルド ステップをターゲットに分割すると、コードのセクションをすべてのターゲットにコピーすることなく、他のターゲットからビルド プロセスの 1 つの部分を呼び出すことができます。 たとえば、ビルド プロセス内の複数のエントリ ポイントで参照をビルドする必要がある場合は、参照をビルドするターゲットを作成し、必要なすべてのエントリ ポイントからそのターゲットを実行できます。

ターゲットは、Target 要素を使用してプロジェクト ファイルで宣言されます。 たとえば、次のコードでは、Compileという名前のターゲットを作成し、前の例で宣言した項目リストを持つ Csc タスクを呼び出します。

<Target Name="Compile">
    <Csc Sources="@(Compile)" />
</Target>

より高度なシナリオでは、ターゲットを使用して相互の関係を記述し、依存関係分析を実行して、そのターゲットが -date up-to場合にビルド プロセスのセクション全体をスキップできます。 ターゲットに関する詳細については、「ターゲット」を参照してください。

ビルド ログ

ビルド エラー、警告、メッセージをコンソールまたは別の出力デバイスに記録できます。 詳細については、「MSBuildを使用したビルド ログの取得」を参照してください。

Visual Studio で MSBuild を使用する

Visual Studio では、MSBuild プロジェクト ファイル形式を使用して、マネージド プロジェクトに関するビルド情報を格納します。 Visual Studio インターフェイスを使用して追加または変更されたプロジェクト設定は、すべてのプロジェクトに対して生成される .*proj ファイルに反映されます。 Visual Studio では、MSBuild のホストされたインスタンスを使用して、マネージド プロジェクトをビルドします。 つまり、マネージド プロジェクトは Visual Studio またはコマンド プロンプトでビルドでき (Visual Studio がインストールされていない場合でも)、結果は同じになります。

Visual Studio で MSBuild を使用する方法のチュートリアルについては、「チュートリアル: MSBuildの使用」を参照してください。

マルチターゲット

Visual Studio を使用すると、アプリケーションをコンパイルして、.NET Framework または .NET Core (.NET 5 以降を含む) のいずれかのバージョンで実行できます。 たとえば、32 ビット プラットフォーム上の .NET Framework 4 で実行するようにアプリケーションをコンパイルし、同じアプリケーションをコンパイルして 64 ビット プラットフォーム上の .NET Framework 4.8 で実行できます。 複数のフレームワークにコンパイルする機能は、マルチターゲットという名前です。

マルチターゲットの利点の一部を次に示します。

  • 以前のバージョンの .NET Framework (バージョン 3.5 や 4.7.2 など) を対象とするアプリケーションを開発できます。

  • ターゲット フレームワークの定義済みのサブセットである、フレームワーク プロファイルをターゲットにすることができます。

  • 現在のバージョンの .NET Framework のサービス パックがリリースされた場合は、それをターゲットにすることができます。

  • マルチターゲットでは、アプリケーションがターゲット フレームワークとプラットフォームで使用可能な機能のみを使用することを保証します。

詳細については、マルチターゲットを参照してください。

ビルドのカスタマイズ

MSBuild では、さまざまなカスタム ビルド シナリオがサポートされています。 ほとんどの組み込み機能はオーバーライドまたは拡張できます。 「ビルドのカスタマイズ」を参照してください。

プログラムによる MSBuild へのアクセス

ビルド ツールを開発している場合は、.NET アプリケーションからプログラムで MSBuild を呼び出すことができます。 MSBuild API を使用すると、複雑なビルド システムのすべての側面を制御できます。 MSBuild には、これらの目的で .NET アプリケーションから使用できる完全な API (Microsoft.Build 名前空間) を含む NuGet パッケージが用意されています。 「MSBuild APIを使用する」を参照してください。

MSBuild はオープン ソースです

MSBuild は、MSBuild GitHub リポジトリでユーザーの投稿を受け入れるオープンソース プロジェクトです。

関連項目

タイトル 説明
チュートリアル: MSBuild プロジェクト ファイルをゼロから作成する テキスト エディターのみを使用して、基本的なプロジェクト ファイルを段階的に作成する方法を示します。
チュートリアル: MSBuild の使用 MSBuild の構成要素について説明し、Visual Studio IDE を閉じずに MSBuild プロジェクトを記述、操作、デバッグする方法を示します。
MSBuild の概念 MSBuild の 4 つの構成要素 (プロパティ、項目、ターゲット、タスク) を示します。
項目 MSBuild ファイル形式の背後にある一般的な概念と、その部分の組み合わせについて説明します。
MSBuild のプロパティ プロパティとプロパティ コレクションについて説明します。 プロパティは、ビルドの構成に使用できるキーと値のペアです。
ターゲット タスクを特定の順序でグループ化し、ビルド プロセスのセクションをコマンド ラインで呼び出せるようにする方法について説明します。
タスク MSBuild でアトミック ビルド操作を実行するために使用できる実行可能コードの単位を作成する方法を示します。
条件 MSBuild 要素で Condition 属性を使用する方法について説明します。
バッチ処理 MSBuild でタスクとターゲットでの実行のメタデータ別に項目リストを分類する方法について説明します。
マルチターゲティング 複数の .NET バージョンまたは複数のプラットフォームをターゲットにする方法を示します。
ビルド ログの取得 ビルド イベント、メッセージ、エラーをログに記録する方法について説明します。
MSBuild でプロジェクトをビルドする方法 MSBuild 内で使用される内部ビルド プロセスについて説明します
コード生成 用のカスタム タスクを作成する コード例を使用して、カスタム タスクを作成する方法を示します。
MSBuild を使用して REST API クライアント を生成する コード例を使用して、REST API クライアントの生成を処理するようにビルドを拡張する方法を示します。
その他のリソース MSBuild の詳細については、コミュニティとサポートのリソースを一覧表示します。

参照