MSBuild の概要
更新 : 2007 年 11 月
Microsoft Build Engine (MSBuild) は、Microsoft および Visual Studio の新しいビルド プラットフォームです。MSBuild を使用すると、ソフトウェアの処理方法とビルド方法を完全に制御できます。開発者は、Visual Studio がインストールされていないビルド ラボ環境において製品を統括的にビルドできます。このトピックでは、次の点について簡単に概要を説明します。
MSBuild プロジェクト ファイルの基本的な構成要素
MSBuild を使用したプロジェクトのビルド方法
MSBuild の高度な機能
Visual Studio による MSBuild を使用したプロジェクトのビルド
プロジェクト ファイル
MSBuild では、理解しやすく簡単に拡張でき、Microsoft によって完全サポートされた XML ベースの新しいプロジェクト ファイル形式が採用されています。MSBuild のプロジェクト ファイル形式では、ビルドに必要な項目のほか、それらを異なるプラットフォームや構成でビルドする方法を開発者が細かく指定できます。また、異なるファイルに適用できるビルド規則を記述しておき、製品を構成するさまざまなプロジェクトで再利用することにより、一貫したビルド作業を行うことができます。以降のセクションでは、MSBuild プロジェクト ファイル形式を構成する基本的な要素について説明します。
項目
項目とはビルド システムへの入力を表すものです。ユーザー定義のコレクション名に基づき、項目のコレクションとしてグループ化されます。コレクション内の個々の項目は、ビルド プロセスの各ステップを実行するタスクによって使用されます。項目のコレクションを、タスクのパラメータとして使用できます。
項目は、そのコレクション名を名前に持つ要素を、ItemGroup 要素の子として作成することにより、プロジェクト ファイルで宣言します。たとえば、次のコードでは、2 つのファイルをインクルードする Compile という名前の項目のコレクションを作成しています。
<ItemGroup>
<Compile Include = "file1.cs"/>
<Compile Include = "file2.cs"/>
</ItemGroup>
プロジェクト ファイルで項目のコレクションを参照するには、@(ItemCollectionName) という構文を使用します。たとえば、上記の例で項目のコレクションを参照するには、@(Compile) のようにします。
項目はワイルドカードを使って宣言できるほか、メタデータを追加することで、より高度なビルド作業を行うことができます。項目の詳細については、「MSBuild 項目」を参照してください。
プロパティ
プロパティはビルドを設定するためのキーと値のペアです。項目とプロパティは、次の点で異なります。
項目はコレクションに格納され、プロパティは単一のスカラ値を含みます。
項目は項目のコレクションから削除できませんが、プロパティは定義後に値を変更できます。
項目はメタデータを格納して、%(ItemMetadata) 表記を使用できますが、プロパティはできません。
プロパティを宣言するには、そのプロパティの名前を持つ要素を PropertyGroup 要素の子として作成します。たとえば、次のコードでは Build を値として持つ BuildDir という名前のプロパティを作成しています。
<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>
プロジェクト ファイルでプロパティを参照するには、$(PropertyName) という構文を使用します。たとえば、先ほどの例では、$(BuildDir) のようにして BuildDir プロパティを参照できます。プロパティの詳細については、「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 を使用したビルド
MSBuild は、コマンド ラインから、MSBuild.exe にプロジェクト ファイルを渡し、適切なコマンド ライン オプションを指定して実行します。コマンド ライン オプションでは、プロパティを設定したり、特定のターゲットを実行したりできるほか、ロガーを指定することもできます。たとえば、Configuration プロパティを Debug に設定してファイル MyProj.proj をビルドするには、次のコマンド ライン構文を使用します。
MSBuild.exe MyProj.proj /property:Configuration=Debug
MSBuild コマンド ライン オプションの詳細については、「MSBuild コマンド ライン リファレンス」を参照してください。
セキュリティに関するメモ : |
---|
ダウンロードしたプロジェクトは、ビルドする前にコードの信頼性を確認する必要があります。システムに悪影響を与えるようなタスクが、MSBuild プロジェクト ファイルによって実行されてしまう可能性があります。 |
高度な使い方
MSBuild は、より高度なビルド作業に対応しています。エラー、警告、メッセージをコンソールや他のロガーに出力したり、ターゲットの依存関係分析を実行したりできるほか、項目のメタデータに指定されたタスクやターゲットをバッチ処理することも可能です。こういった高度な使い方の詳細については、「MSBuild の詳細な概念」を参照してください。
Visual Studio の統合
Visual Studio は、MSBuild プロジェクト ファイル形式を使用して、マネージ プロジェクトに関するビルド情報を保存します。Visual Studio を使用して追加および変更されたプロジェクトの設定は、各プロジェクトで生成される .*proj ファイルに反映されます。Visual Studio は、MSBuild のホスト インスタンスを使用して、マネージ プロジェクトをビルドします。つまり、マネージ プロジェクトは、Visual Studio でも、コマンド ラインを使用しても (Visual Studio がインストールされていない場合でも)、同じようにビルドできます。Visual Studio が MSBuild を使用する方法の詳細については、「MSBuild の詳細な概念」を参照してください。
参照
概念
MSBuild プロジェクト ファイル スキーマ リファレンス