MSBuild

Microsoft Build Engine (MSBuild) は、アプリケーションをビルドするためのプラットフォームです。 MSBuild には、ビルド プラットフォームでソフトウェアを処理およびビルドする方法を制御する、プロジェクト ファイル用の XML スキーマが用意されています。 MSBuild は Visual Studio に統合されていますが、依存しているわけではありません。開発者は、Visual Studio がインストールされていない環境で製品を調整し、ビルドできます。

ここでは、MSBuild の概要について説明します。

  • MSBuild プロジェクト ファイルの基本的な構成要素

  • MSBuild を使用したプロジェクトのビルド方法

  • MSBuild の高度な機能

  • Visual Studio による MSBuild を使用したプロジェクトのビルド

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

プロジェクト ファイル

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

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

プロパティ

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

<PropertyGroup>

<BuildDir>Build</BuildDir>

</PropertyGroup>

プロジェクト ファイルでプロパティを参照するには、$(PropertyName) という構文を使用します。 たとえば、この例に示したプロパティを参照するには、$(BuildDir) と記述します。 プロパティの詳細については、「MSBuild プロパティ」を参照してください。

項目

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

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

<ItemGroup>

<Compile Include = "file1.cs"/>

<Compile Include = "file2.cs"/>

</ItemGroup>

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

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

タスク

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

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

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

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

<Target Name="MakeBuildDirectory">

<MakeDir Directories="$(BuildDir)" />

</Target>

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

ターゲット

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

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

<Target Name="Compile">

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

</Target>

ターゲットを使用して相互の関係を定義し、依存関係の分析を実行するなど、より高度なシナリオにも対応しています。これにより、ターゲットが最新のものである場合に、ビルド処理からセクション全体をスキップするようなことが可能となります。 ターゲットの詳細については、「MSBuild ターゲット」を参照してください。

条件付き要素

MSBuild の多くの要素は、Condition 属性を使用して条件付きで定義されます。 条件が "true" と評価されないと、条件付き要素の内容は無視されます。 次に例を示します。

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

これは、"Configuration プロパティが定義されていない場合に、それを定義して値を Debug に設定する" という意味になります。

Condition 属性は MSBuild のほぼすべての要素に設定できます。 詳細については、「MSBuild の条件」を参照してください。

大文字と小文字の区別

MSBuild の XML スキーマには、XML の規則が適用されます。 要素名および属性名では大文字と小文字が区別されますが、 MSBuild オブジェクト モデルに含まれるプロパティ、項目、およびメタデータの名前では大文字と小文字が区別されません。 次のような項目グループがあるとします。

<ItemGroup>

<Compile Include="one.cs" />

<comPile Include="two.cs" />

</ItemGroup>

この場合、Compile または comPile という項目の種類 (または大文字小文字が異なるさらに別の項目の種類) のいずれかが作成され、値が "one.cs;two.cs" に設定されます。

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

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

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

MSBuild のコマンド ライン オプションの詳細については、「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 のうち、任意のバージョンで動作するようにアプリケーションをコンパイルできます。 たとえば、同じアプリケーションを、.NET Framework Version 2.0 で動作するようにコンパイルしたり、.NET Framework Version 4 で動作するようにコンパイルしたりできます。 複数のフレームワークに対してコンパイルする機能をマルチ ターゲットといいます。

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

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

  • Silverlight フレームワークなど、.NET Framework 以外のフレームワークを対象にできます。

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

  • .NET Framework Version 4 のサービス パックがリリースされた場合、それを対象にできます。

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

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

関連トピック

タイトル

説明

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

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

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

MSBuild のビルド ブロックについて説明し、Visual Studio 統合開発環境 (IDE: Integrated Development Environment) を閉じずに MSBuild プロジェクトを記述、操作、およびデバッグする方法について説明します。

MSBuild の概念

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

MSBuild 項目

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

MSBuild プロパティ

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

MSBuild ターゲット

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

MSBuild タスク

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

MSBuild の条件

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

MSBuild の詳細な概念

バッチ処理、変換の実行、ビルドの監視 (ログ記録) など、高度な利用法を紹介します。

追加の MSBuild リソース

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

参照