![]() |
特集MSBuild完全攻略(後編)ビルド・エンジン「MSBuild」を思いのままに操る技デジタルアドバンテージ 一色 政彦 |
|
|
前編では、MSBuildとは何かについて、またその実行方法について解説した。MSBuildは自由度の高いツールなので、ビルドに付随するさまざまな独自タスクを自動化できる。
しかし、本当に思いどおりに使いこなすには、MSBuildファイルの内容についての深い理解が必要だ。そこで後編となる今回は、MSBuildファイルの内容の読み方と書き方を示し、さらにはより高度なMSBuildファイルを作成する方法を紹介しよう。
なお本稿ではVisual Studio 2005 Professional Edition(以降、VS 2005)を利用している。
4. MSBuildファイルの徹底理解
まずはVS 2005で生成されたプロジェクト・ファイル(=MSBuildファイル)の内容を見てみよう。ここで使用するサンプル・アプリケーションは前回と同じコンソール・アプリケーションである。
VS 2005を使っている場合は、プロジェクト・ファイルをIDEから直接、編集できる(使っていない場合は、プロジェクト・ファイルをテキスト・エディタなどで開けばよい)。
具体的には次の画面の手順を参考にしてほしい*2。
|
*2 ただし、VS 2005の各Express Editionでは、Visual C++ 2005を除いて、下の画面で説明している「 |
![]() |
|||||||||
| VS 2005 IDEのXMLエディタでプロジェクト・ファイルを開く手順 | |||||||||
| VS 2005 IDEで現在開いているプロジェクトのMSBuildファイルを、XMLエディタで表示したところ。 | |||||||||
|
VS 2005が生成するプロジェクト・ファイルの記述内容は少し長いので、ここでそのすべてをまとめて説明するのは難しい。従って、以降ではこのプロジェクト・ファイルとほぼ同じ内容のMSBuildファイルを作成する手順を通して、MSBuildファイルの読み方、書き方について説明していくことにしよう。
■VS 2005による独自のMSBuildファイルの編集
最初に「ConsoleApplication1.myproj」という名前の独自のMSBuildファイルを新規作成しよう。VS 2005がない場合はテキスト・エディタで編集するしかないが、ある場合はIntelliSenseが使えるのでVS 2005を活用した方がよい。
次の画面は、独自のMSBuildファイル(本稿の例では「.myproj」という拡張子を持つファイル)をVS 2005のXMLエディタに関連付けて*3、次回以降で簡単に編集できるようにするための前準備を行う方法を示している。
|
*3 ただしこの機能は、Express Editionの中では、Visual C++ 2005 Express Editionにしか搭載されていない。従ってそれ以外のExpress Editionを使う場合には毎回手動でXMLエディタを選択してファイルを選択する必要がある(つまり次の画面で示す |
![]() |
||||||||||||
| VS 2005で独自のMSBuildファイルを編集するための前準備 | ||||||||||||
| 最初に独自のMSBuildファイル(本稿の例では「*.myproj」)に対するXMLエディタの関連付けを行う。これにより、次回以降そのMSBuildファイルをVS 2005のIDEで普通に開こうとすると、自動的にXMLエディタで開かれるようになる。なおここではいったんプロジェクトにMSBuildファイルを追加する方法を示しているが、IDEのメニュー・バーから[ファイル]−[開く]−[ファイル]を選択して[ファイルを開く]ダイアログを表示し、そこの[開く]ボタンの右端にある[▼]メニューから[ファイルを開くアプリケーションの選択]を選択して |
||||||||||||
|
■MSBuildファイルのルート要素 ― <Project>タグ
上記の方法で独自のMSBuildファイルを新規作成すると、ファイル内に
「<?xml version="1.0" encoding="utf-8" ?>」 |
というXML宣言が記述されているが、MSBuildファイルではこれは不要なので消してよい(もちろん消さなくても問題なく動作する)。そして、次のテキストを追加してほしい。これにより、IntelliSenseを使ったMSBuild関連タグの挿入が可能になる。
|
|
| MSBuildファイルに最低限必要な<Project>タグの記述 |
ここで記述した<Project>タグはMSBuildファイル(=プロジェクト・ファイル)のルート要素で、前回でも度々登場したVS 2005プロジェクトと同じ概念である。すなわち、モジュール(=ビルドにより出力するプログラム・ファイル)ごとに1つの<Project>タグが必要で、いうまでもないがMSBuildファイル1つにつき、<Project>タグは1つしか記述できない。
|
【コラム】MSBuildによるマルチ・モジュール・アセンブリの開発 ここで、アセンブリではなくモジュールと記述しているのは、.NET Frameworkでは複数のモジュール(=ファイル)で1つのアセンブリを構成することが可能なので、必ずしも「1プロジェクト=1アセンブリ」とは限らないからだ。このようなアセンブリは、「マルチ・モジュール・アセンブリ」と呼ばれ、複数言語(例えば、C#とVisual Basic:以降VB)で作成したモジュールを1つのアセンブリとして扱いたい場合などに使われる。
このため、実際にこのようなモジュールを作成するには、VS 2005とは別のMSBuildファイルを作成するか、MSBuildをコマンドラインから呼び出す際にOutPutプロパティの上書き設定を行う必要があるのだ(コマンドラインからプロパティを設定する方法は前回説明した)。 さらに、そこで生成したモジュールをアセンブリ・ファイルに追加するための指定も必要となる。具体的には、C#やVBのコンパイルを行うタスクである<Csc>タグ(=Cscタスク)や<Vbc>タグ(=Vbcタスク)を独自に追加して、そのAddModules属性にそのモジュールを指定する。例えば、次のような内容のMSBuildファイルが必要になるわけだ(このMSBuildファイルを含むプロジェクト全体は説明欄のリンクからダウンロードできる)。
|
■処理プロセスの定義 ― <Target>タグ
MSBuildファイルでルート要素の次に重要なのが「ターゲット(Target)」である。ターゲットについては前回でも解説したが、「処理プロセスの1単位」を意味し、例えば「ビルド」や「コンパイル」などの各処理プロセス1つ1つがターゲットとなる。
VS 2005のプロジェクトの基本的なターゲット(=ビルド処理プロセス)としては、「ビルド(Build)」「リビルド(Rebuild)」「クリーン(Clean)」「発行(Publish)」などが考えられる。例えばこのうちビルドに関するターゲットを独自に定義するなら、次のように記述すればよい。
|
|
| Buildターゲットの定義方法 | |
| ルート要素の<Project>タグの中に<Target>タグを記述する。なおターゲットはプロジェクト内にいくつ記述してもよい。 |
<Target>タグのName属性にターゲット名(この例では「Build」)を指定して、ターゲットを定義する。なおここで「……タスクの記述……」と記述している個所には、処理プロセスを構成する具体的な処理作業(例えば「ディレクトリの作成」「コンパイラの呼び出し」など)を記述する。この細かな処理作業は「タスク(Task)」と呼ばれ、「処理作業の最小単位」を意味する。つまり1つのターゲット(=処理プロセス)は、一連のタスク(=処理作業)を実行する手順(=プロセス)によって構成されるわけである。このタスクの定義方法について詳しくは後述する。
上記ではBuildターゲットを定義する例を示したが、実はビルドに必要な標準的なターゲットは、.NET Framework 2.0のランタイムがインストールされている場所(基本的には「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」)の「Microsoft.CSharp.targets」というファイル(C#の場合。VBの場合は「Microsoft.VisualBasic.targets」)にあらかじめ定義されているので*4、これをMSBuildファイル内にインポートして利用すれば、実際には独自に定義する必要はない。
| *4 厳密には「Microsoft.CSharp.targets」や「Microsoft.VisualBasic.targets」がインポートしている「Microsoft.Common.targets」に標準的なターゲットが実装されている。 |
Microsoft.CSharp.targetsファイルを実際にMSBuildファイルへインポートするには、<Import>タグを使えばよい。次のコードではそれを実際に行っている例だ。
|
|
| MSBuild予約済みターゲットのインポート方法 | |
| <Import>タグにより、Microsoft.CSharp.targetsファイルをインポートする。 |
この例では、<Import>タグのProject属性にMicrosoft.CSharp.targetsファイルへのパスを指定している。このファイルが格納されている.NET Framework 2.0ラインタイムのインストール・フォルダへのパスは、「MSBuildBinPath」という予約済みプロパティから取得できる。なお上記のコードを見れば分かるように、プロパティのデータには
「$(<プロパティ名>)」 |
という構文でアクセスできる(この例では「$(MSBuildBinPath)」という式によりMSBuildBinPathプロパティのデータにアクセスしているが、これにより筆者の環境では「C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727」というパス名が取得できる)。
以上のインポートの記述によりMSBuildファイル内でBuildターゲットが利用できるようになったので、MSBuildを実行したときにデフォルトでこのターゲットが実行されるようにしておこう。これには<Project>タグのDefaultTargets属性にターゲット名として「Build」を指定すればよい。具体的には次のようなコードになる。
|
|
| デフォルト・ターゲットの指定 | |
| <Project>タグのDefaultTargets属性にターゲット名として「Build」を指定する。 |
| INDEX | ||
| MSBuild完全攻略 | ||
| .NETビルド・エンジン「MSBuild」使いこなし術(前編) | ||
| 1.「MSBuild」および「MSBuildファイル」とは? | ||
| 2.コマンドラインからMSBuildを使いこなす! | ||
| ビルド・エンジン「MSBuild」を思いのままに操る技(後編) | ||
| 3.MSBuildファイルの基本要素を理解する | ||
| 4. プロジェクト項目、プロパティ、条件分岐の記述 | ||
| 5. カスタム・タスクでMSBuildを思いのままに操る! | ||
ホワイトペーパー(TechTargetジャパン)
- Chapter15:LINQとクエリ式 (2010/3/17)
C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載 - VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ - 逆引きリファレンス:コア編 (2010/3/12)
jQueryのキモともいえる$()関数を始め、jQueryオブジェクトの中核となるメソッドについてまとめた、すぐに役立つ12本を一挙公開
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |









