MSBuild 色々出来るよ 2011/04/02 お だ わんくま同盟 大阪勉強会 #42 自己紹介 • 織田 信亮 (おだ しんすけ) • 新日本コンピュータマネジメント という会社で 開発者やってます。 • 個人的に興味のある技術等を blog で取り上 げてます。 http://d.hatena.ne.jp/odashinsuke/ • SQL World/わんくま同盟/JGGUG 等の勉強 会に参加してます わんくま同盟 大阪勉強会 #42 アジェンダ • • • • • MSBuild ってなに? どんなことが出来るの? 拡張も出来るよ 力技で何でも出来る! まとめ わんくま同盟 大阪勉強会 #42 MSBuild ってなに? わんくま同盟 大阪勉強会 #42 MSBuild とは Microsoft Build Engine (MSBuild) Visual Studio 2005(.NET 2.0)から利用出来る ようになったビルドプラットフォームです。 XML ベースのプロジェクトファイル(.*proj)を用 いて設定します。 わんくま同盟 大阪勉強会 #42 MSBuild の主な構成要素 • • • • プロパティ (Property) 項目 (Item) タスク (Task) ターゲット (Target) http://msdn.microsoft.com/ja-jp/library/dd393574.aspx わんくま同盟 大阪勉強会 #42 プロパティ/項目 • プロパティ ビルドを設定するためのキーと値のペア • 項目 ビルド システムへの入力であり、通常はファイルを 表します 繰り返し項目(ワイルドカードで、ファイルを指定)等、 プロパティより柔軟に使える値の格納場所 メタデータも設定可能(ビルド以外でも利用される) わんくま同盟 大阪勉強会 #42 タスク • タスク ビルド処理を実行するために使用される一連の実行 可能コードです(コンパイルしたり、外部ツールを実 行したり…) 実際に動く最小単位の処理 わんくま同盟 大阪勉強会 #42 ターゲット • ターゲット タスクを特定の順序でグループ化し、プロジェクト ファイルの各セクションを、ビルド プロセスのエントリ ポイントとして公開する役割を果たします。 幾つかのタスクを取りまとめた MSBuild で実行する単位 わんくま同盟 大阪勉強会 #42 デモ Windows Form プロジェクトファイルを見てみよう わんくま同盟 大阪勉強会 #42 おまけ • MSBuild 4 からは、プロパティで関数の呼び 出しが出来るようになっています。 http://msdn.microsoft.com/ja-jp/library/dd633440.aspx わんくま同盟 大阪勉強会 #42 どんなことが出来るの? わんくま同盟 大阪勉強会 #42 標準のタスクを一部紹介 • Csc お馴染みC#コンパイラの呼び出し • MakeDir 名前の通りディレクトリの作成 • CallTarget ターゲットの呼び出し • Exec プログラムやコマンドを実行 わんくま同盟 大阪勉強会 #42 デモ MSBuild で Hello World わんくま同盟 大阪勉強会 #42 .Targets ファイル • 一般的なシナリオ向けにアイテム、プロパティ、 ターゲット、およびタスクが定義されたファイル .Targets ファイル 内容 Microsoft.Common.Targets VB プロジェクトと C# プロジェクトの標準ビルド プロセスにおける手順を定義 Microsoft.CSharp.Targets C# プロジェクトの標準ビルド プロセスにおける 手順を定義 わんくま同盟 大阪勉強会 #42 デモ どこでコンパイルしているか .Targets ファイルを追いかけてみる わんくま同盟 大阪勉強会 #42 1.C# プロジェクト作成 2.DefaultTarget="Build" となっている 3.Build という ターゲット は プロジェクトファイルに定義されていない 4.<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> を発見 5.%windir%\Microsoft.NET\Framework\バージョン番号 に targets ファイルがあるので見てみる 6.Build という ターゲット は CSharp.targets にも定義されていない 7.<Import Project="Microsoft.Common.targets" /> を発見 8.Common.targets ファイルを見てみる 9.Build ターゲット 発見(BeforeBuild, CoreBuild, AfterBuild の順で 呼ばれる) BeforeBuild、AfterBuild では何もしていない?! わんくま同盟 大阪勉強会 #42 10.CoreBuild ターゲット を見てみる 11.Compile ターゲット を見てみる 12.CoreCompile ターゲット を見てみる 13.Common.targets に CoreCompile が無い! CSharp.targets に戻って確認 14.CSC タスクを使ってますね。 15.プロジェクトファイルに、BeforeBuild, AfterBuild を定義する 16.ビルドを実行すると、BeforeBuild、AfterBuild が動いている事が 確認できる。 17.CSharp.targets を Import する前に、BeforeBuild、AfterBuild を 定義すると…実行されない わんくま同盟 大阪勉強会 #42 プロパティやターゲットは上書きされる • プロパティ/ターゲットは、最後に定義された物 で上書きされる。 • プロジェクトファイルの CSharp.targets ファイ ル Import 以降にBuild ターゲットを再定義す ると… わんくま同盟 大阪勉強会 #42 拡張も出来るよ わんくま同盟 大阪勉強会 #42 カスタムタスクの紹介 • MSBuild Comminuty Tasks http://msbuildtasks.tigris.org/ • MSBuild Extension Pack http://msbuildextensionpack.codeplex.com/ わんくま同盟 大阪勉強会 #42 自前で用意する場合 • MSBuild.Build.Framework.ITask を実装 (Microsoft.Build.Framework.dll) • 既定の実装として、 MSBuild.Build.Utilities.Task(Microsoft.Build .Utilities.V4.0.dll) が用意されているので、こ れを継承し、Execute メソッドを実装 わんくま同盟 大阪勉強会 #42 デモ 自前で用意するタスクの実装/利用 わんくま同盟 大阪勉強会 #42 力技で何でも出来る! わんくま同盟 大阪勉強会 #42 Exec タスクで何でも出来る! • Exec タスクは、直接プロセスを呼び出す代わ りに cmd.exe を呼び出します。 http://msdn.microsoft.com/ja-jp/library/x8zx72cd.aspx cmd.exe を呼び出すので、何でも出来る わんくま同盟 大阪勉強会 #42 Exec タスクで何でも出来る! • NUnit の実行 • PartCover の実行 • Sandcastle の実行 わんくま同盟 大阪勉強会 #42 色んなタスクを組み合わせると… • • • • ソース管理から最新ファイルを取得 ビルド テスト/レポートの作成 必要なファイルを ZIP 圧縮 Hudson(Jenkins)、CCNET、TFS 等の CI サーバーと組み合わせると便利! CI サーバーが無くても、 Windows のタスク等で昼休み/夜間に実行するとか わんくま同盟 大阪勉強会 #42 まとめ • MSBuild は XML ベースで設定するビルド ツール • Visual Studio 上での設定も含んでる • 知らなくても特に問題無い • チームに一人は知ってる人が居ると良いかも わんくま同盟 大阪勉強会 #42
© Copyright 2024 ExpyDoc