Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ms build 色々出来るよ

2,723 views

Published on

Published in: Technology, Business
  • Be the first to comment

Ms build 色々出来るよ

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

×