ms build 色々出来るよ

28
わわわわわわ わわわわわ #42 MSBuild わわわわわわ 2011/04/02 わ わ

Upload: oda-shinsuke

Post on 27-May-2015

2.123 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

MSBuild 色々出来るよ

2011/04/02 お だ

Page 2: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

自己紹介

• 織田 信亮 ( おだ しんすけ )• 新日本コンピュータマネジメント という

会社で開発者やってます。• 個人的に興味のある技術等を blog で取り

上げてます。 http://d.hatena.ne.jp/odashinsuke/

• SQL World/ わんくま同盟 /JGGUG 等の勉強会に参加してます

Page 3: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

アジェンダ

• MSBuild ってなに?• どんなことが出来るの?• 拡張も出来るよ• 力技で何でも出来る!• まとめ

Page 4: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

MSBuild ってなに?

Page 5: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

MSBuild とは

Microsoft Build Engine (MSBuild)

Visual Studio 2005(.NET 2.0) から利用出来るようになったビルドプラットフォームです。

XML ベースのプロジェクトファイル(.*proj) を用いて設定します。

Page 6: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

MSBuild の主な構成要素

• プロパティ (Property)• 項目 (Item)• タスク (Task)• ターゲット (Target)

http://msdn.microsoft.com/ja-jp/library/dd393574.aspx

Page 7: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

プロパティ / 項目

• プロパティビルドを設定するためのキーと値のペア

• 項目ビルド システムへの入力であり、通常はファイルを表します

繰り返し項目 ( ワイルドカードで、ファイルを指定 ) 等、プロパティより柔軟に使える値の格納場所メタデータも設定可能 ( ビルド以外でも利用される )

Page 8: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

タスク

• タスクビルド処理を実行するために使用される一連の実行可能コードです(コンパイルしたり、外部ツールを実行したり…)

実際に動く最小単位の処理

Page 9: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

ターゲット

• ターゲットタスクを特定の順序でグループ化し、プロジェクト ファイルの各セクションを、ビルド プロセスのエントリ ポイントとして公開する役割を果たします。

幾つかのタスクを取りまとめた MSBuild で実行する単位

Page 10: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

デモ

Windows Form プロジェクトファイルを見てみよう

Page 11: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

おまけ

• MSBuild 4 からは、プロパティで関数の呼び出しが出来るようになっています。

http://msdn.microsoft.com/ja-jp/library/dd633440.aspx

Page 12: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

どんなことが出来るの?

Page 13: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

標準のタスクを一部紹介

• Cscお馴染み C# コンパイラの呼び出し

• MakeDir名前の通りディレクトリの作成

• CallTargetターゲットの呼び出し

• Execプログラムやコマンドを実行

Page 14: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

デモ

MSBuild で Hello World

Page 15: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

.Targets ファイル

• 一般的なシナリオ向けにアイテム、プロパティ、ターゲット、およびタスクが定義されたファイル.Targets ファイル 内容

Microsoft.Common.Targets VB プロジェクトと C# プロジェクトの標準ビルド プロセスにおける手順を定義

Microsoft.CSharp.Targets C# プロジェクトの標準ビルド プロセスにおける手順を定義

Page 16: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

デモ

どこでコンパイルしているか.Targets ファイルを追いかけてみる

Page 17: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #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 では何もしていない?!

Page 18: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #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 を定義すると…実行されない

Page 19: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

プロパティやターゲットは上書きされる

• プロパティ / ターゲットは、最後に定義された物で上書きされる。

• プロジェクトファイルの CSharp.targets ファイル Import 以降に Build ターゲットを再定義すると…

Page 20: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

拡張も出来るよ

Page 21: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

カスタムタスクの紹介

• MSBuild Comminuty Taskshttp://msbuildtasks.tigris.org/

• MSBuild Extension Packhttp://msbuildextensionpack.codeplex.com/

Page 22: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

自前で用意する場合

• MSBuild.Build.Framework.ITask を実装 (Microsoft.Build.Framework.dll)

• 既定の実装として、 MSBuild.Build.Utilities.Task(Microsoft.Build.Utilities.V4.0.dll) が用意されているので、これを継承し、 Execute メソッドを実装

Page 23: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

デモ

自前で用意するタスクの実装 / 利用

Page 24: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

力技で何でも出来る!

Page 25: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

Exec タスクで何でも出来る!

• Exec タスクは、直接プロセスを呼び出す代わりに cmd.exe を呼び出します。http://msdn.microsoft.com/ja-jp/library/x8zx72cd.aspx

cmd.exe を呼び出すので、何でも出来る

Page 26: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

Exec タスクで何でも出来る!

• NUnit の実行• PartCover の実行• Sandcastle の実行

Page 27: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

色んなタスクを組み合わせると…

• ソース管理から最新ファイルを取得• ビルド• テスト / レポートの作成• 必要なファイルを ZIP 圧縮

Hudson(Jenkins) 、 CCNET 、 TFS 等のCI サーバーと組み合わせると便利!

CI サーバーが無くても、Windows のタスク等で昼休み / 夜間に実行するとか

Page 28: Ms build 色々出来るよ

わんくま同盟 大阪勉強会 #42

まとめ

• MSBuild は XML ベースで設定するビルドツール

• Visual Studio 上での設定も含んでる• 知らなくても特に問題無い• チームに一人は知ってる人が居ると良い

かも