MSBuild

Microsoft Build Engine は、アプリケーションをビルドするためのプラットフォームです。(MSBuild であるこのエンジンは制御する、プロジェクト ファイルにビルド プラットフォームでソフトウェアのビルドを処理し、または XML スキーマが用意されています。Visual Studio は MSBuild を使用しますが、Visual Studio に依存しません。プロジェクト ファイルまたはソリューション ファイルの) 開始すると、Visual Studio のインストール環境の製品を調整し、ビルドできます。

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

次の例では、Visual Studio IDE またはではなく、MSBuild コマンド ラインでビルドを実行する方法を説明します。

  • Visual Studio がインストールされます。

  • MSBuild の 64 ビット バージョンを使用する必要があります。MSBuild のこのバージョンは、通常は不要ですが、MSBuild はより多くのメモリにアクセスできるようにします。

  • 複数のプロセスのビルドを実行します。ただし、C、C++ プロジェクトの同じ結果は、Visual Studio 2012 からは実現するために、IDE を使用できます。

  • ビルド システムを変更する。たとえば、次のアクションを有効にする可能性があります:

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

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

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

    • 後処理手順に従います。たとえば、異なるバージョンを持つアセンブリを押してする場合があります。

Visual Studio IDE でコードを作成できますが、MSBuild を使用してビルドを実行します。別の方法として、開発用コンピューターの IDE のコードをビルド複数の開発者から統合されたコードをビルドするために、MSBuild コマンド ラインを使用できますが、

[!メモ]

には、アプリケーションをコンパイル、テスト、および配置するには、Team Foundation ビルドを使用できます。ビルド システムは、スケジュール (たとえば、夜間ビルド確認テスト ビルド) に応じて自動的にビルドをと開発者のチェックイン コード (たとえば、継続的インテグレーションの方法の一部として) または実行できます。Team Foundation ビルドは MSBuild を使用してコードをコンパイルします。詳細については、「アプリケーションのビルド」を参照してください。

ここでは、MSBuild の概要を説明します。入門用のチュートリアルについては、「チュートリアル: MSBuild の使用」を参照してください。

このトピックの内容

  • コマンド プロンプトでの MSBuild の使用

  • プロジェクト ファイル

    • プロパティ

    • Items

    • タスク

    • ターゲット

  • ビルド ログ

  • Visual Studio での MSBuild の使用

  • マルチ ターゲット

コマンド プロンプトでの MSBuild の使用

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

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

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

セキュリティに関するメモセキュリティに関するメモ

プロジェクトをダウンロードする前に、コードが信頼できるものかどうかを確認してください。

プロジェクト ファイル

MSBuild は、簡単で拡張性がある XML ベースのプロジェクト ファイル形式を使用します。MSBuild のプロジェクト ファイル形式では、ビルドする項目のほか、それらを異なるオペレーティング システムや構成用にビルドする方法を開発者が指定できます。また、プロジェクト ファイル形式は、ビルドが製品で異なるプロジェクト間で一貫した方法で実行できるように、開発者が個別のファイルに適用できる再利用可能なビルド規則を作成できるようにします。

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

Dd393574.collapse_all(ja-jp,VS.110).gifプロパティ

プロパティはビルドを設定するためのキーと値のペアです。プロパティを宣言するには、そのプロパティの名前を持つ要素を PropertyGroup 要素の子として作成します。たとえば、次のコードは BuildDir という名前の Buildの値を持つプロパティを作成します。

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

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

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

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

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

Dd393574.collapse_all(ja-jp,VS.110).gifItems

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

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

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

プロジェクト ファイルで項目の種類を参照するには、@(ItemType) という構文を使用します。たとえば、この例に示した項目の種類を参照するには、@(Compile) と記述します。

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

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

項目はワイルドカード文字を使って宣言できるほか、メタデータを追加することで、より高度なビルド作業を行うことができます。項目の詳細については、「MSBuild 項目」を参照してください。

Dd393574.collapse_all(ja-jp,VS.110).gifタスク

タスクとは、MSBuild プロジェクトでビルド処理を実行するために使用される一連の実行可能コードです。たとえば、タスクでは入力ファイルをコンパイルしたり、外部ツールを実行したりします。タスクは再利用が可能で、複数の開発者が複数のプロジェクトで共有できます。

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

MSBuild は、要件に合わせて変更できる共通のタスクが含まれています。この例では [コピー]です MakeDir、ファイル、ディレクトリを作成すると、[csc]をコピーし、Visual C# ソース・コード ファイルをコンパイルします。使用可能なタスクと使用法については、「MSBuild タスク リファレンス」を参照してください。

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

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

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

Dd393574.collapse_all(ja-jp,VS.110).gifターゲット

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

ターゲットは、プロジェクト ファイル内で、Target 要素を使用して宣言します。たとえば、次のコードでは、先ほどの例で宣言した項目のリストをパラメーターに指定して Csc タスクを呼び出す、Compile という名前のターゲットを作成しています。

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

高度なシナリオでは互いの間にリレーションシップを定義し、依存関係の分析を実行するには、ターゲットが最新のものでもスキップできるようにターゲットを使用できます。ターゲットの詳細については、「MSBuild ターゲット」を参照してください。

ビルド ログ

コンソールまたは別の出力デバイスにビルド エラー、警告、およびメッセージを記録できます。詳細については、「MSBuild でのビルド ログの取得」および「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 のうち、任意のバージョンで動作するようにアプリケーションをコンパイルできます。たとえば、32 ビット プラットフォームで .NET Framework 2.0 で動作するアプリケーションをコンパイル 64 ビット プラットフォームの .NET Framework 4.5 で実行されている同じアプリケーションをコンパイルできます。複数のフレームワークに対してコンパイルする機能をマルチ ターゲットといいます。

マルチ ターゲットには、次のような利点があります。

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

  • .NET Framework 以外のターゲット フレームワーク (たとえば、Silverlight できます。

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

  • .NET Framework の現在のバージョンの Service Pack がリリースされた場合、それを対象にできます。

  • アプリケーションがターゲット フレームワークとプラットフォームで使用できる機能だけを使用するように保証できます。

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

関連トピック

Title

説明

チュートリアル: MSBuild プロジェクト ファイルのゼロからの作成

テキスト エディターのみを使用して、基本的なプロジェクト ファイルをインクリメント方式で作成する方法について説明します。

チュートリアル: MSBuild の使用

MSBuild のレポート部分について説明し、Visual Studio IDE を閉じずに MSBuild プロジェクトを記述、操作、およびデバッグする方法を示します。

MSBuild の概念

MSBuild の 4 つのビルド ブロックであるプロパティ、項目、ターゲット、およびタスクについて説明します。

MSBuild 項目

MSBuild ファイル形式の一般的な概念と、各構成要素の組み合わせ方について説明します。

MSBuild プロパティ

プロパティとプロパティ コレクションについて説明します。プロパティはビルドを設定するためのキーと値のペアです。

MSBuild ターゲット

タスクを特定の順序でグループ化し、コマンド ラインからビルド処理のセクションを呼び出すことができるようにする方法について説明します。

MSBuild タスク

実行可能コードにおける、MSBuild による分割不可能なビルド処理の実行単位を作成する方法について説明します。

MSBuild の条件

MSBuild の要素で Condition 属性を使用する方法について説明します。

MSBuild の詳細な概念

バッチ処理、変換、現在マルチ ターゲット、およびそのほかの高度な手法を実行します。

MSBuild でのログ

ビルド イベント、メッセージ、およびエラーを記録する方法について説明します。

追加の MSBuild リソース

MSBuild に関する詳細な情報を提供するコミュニティやサポートのリソースを紹介します。

Reference