Upload
oda-shinsuke
View
919
Download
0
Embed Size (px)
Citation preview
自己紹介
織田 信亮 ( おだ しんすけ )大阪で開発者していますSQLWorld の代表です
http://odashinsuke.hatenablog.com/Twitter:@shinsukeoda
MSBuild 知ってますか?
Microsoft Build EngineXML ベースで記述するビルドツール
Visual Studio で使う .*proj ファイルなら知ってる? (.csproj/.vbproj 等 )
それが MSBuild プロジェクトファイル!※Visual Studio 2005 以降
インストールした憶えないけど?
昔は .NET Framework に同梱現在は Visual Studio に同梱単体でもインストール可能に
Micorsoft Build Tools 2013http://www.microsoft.com/ja-jp/download/details.aspx?id=40760
Visual Studio 2005 ~と仲良し!
プロジェクトファイル = MSBuild プロジェクトファイルVisual Studio でビルドすると、 MSBuild を呼び出してビルドしているMSBuild プロジェクトファイルは Visual Studio で使うメタデータも持っている
ビルドでは使わないが Visual Studio の機能で利用するデータ
Visual Studio で MSBuild 書く
.proj ファイルは XML エディターでメニュー -> XML -> スキーマ -> 追加
Visual Studio インストールフォルダ \Xml\Schemas\1041\MSBuild 以下の .xsd を選択
Target
Task を特定の順序でグループ化したものMSBuild は Target 単位での実行
エントリポイントTarget 間の依存関係 / 前後関係の指定も可一般的なものは、提供済みの .targets ファイルにまとめられてる
Task
標準で用意されている Taskhttps://msdn.microsoft.com/ja-jp/library/7z253716.aspx
拡張タスクTask を実装した DLL を呼び出すインライン Task
Task ( 属性 )
ConditionTask を実行するかどうかの条件式Condition=“’$(CONFIG)’==‘DEBUG’”
ContinueOnErrorエラーがあっても後続を実行するかどうか.NET 4.5 より前は true/falseWarnAndContinue: 警告扱いで続行 (true)ErrorAndContinue: エラー扱いで続行ErrorAndStop: エラー扱いで終了 (false)既定値は ErrorAndStop or false
Target
標準で用意されている TargetMicrosoft.Common.targetsMicrosoft.CSharp.targetsMicrosoft.VisualBasic.targets…
MSBuild フォルダを漁ると色々あります同じ名前の Target は後勝ち (Property の箇所で詳細解説 )
Target ( 属性 - 依存関係 / 前後処理 )
DependsOnTargetsTarget 実行前に指定された Target を実行<Target Name=“Package” DependsOnTargets=“Clean;Build” >
BeforeTargets/AfterTargetsTarget の前後に指定された Target を実行<Target Name=“bar” BeforeTargets=“foo” AfterTargets=“baz”>
同じ Target は 1 ビルド中に 1 回だけしか実行されない
Target ( エラー処理 )
Task の ContinueOnError が ErrorAndStop / false の場合は、 OnError で指定した Target を実行TaskOne 、 TaskTwo どちらでエラーが出ても OtherTarget が実行され
る。エラーが出ない場合は、 OtherTarget は実行されない<Target Name="ThisTarget"> <TaskOne ContinueOnError="ErrorAndStop“ />" <TaskTwo /> <OnError ExecuteTargets="OtherTarget" /></Target>
Property
同じ名前の Property は後で指定した物が優先される
.targets で指定されている場合も同様Import の位置が大事!
<PropertyGroup> <Param>Default</Param></PropertyGroup><Target Name="Hello"> <Message Text="Hello $(Param) さん " /></Target><PropertyGroup> <Param>Default2</Param></PropertyGroup>
後ろで指定されている Default2 が出力される
Property
プロパティ関数基本的なデータ型 / 型変換 / ファイルパス / 正規表現 等の static なメソッド / プロパティの呼び出しサポート
<PropertyGroup> <Today>$([System.DateTime]::Now.ToString("yyyy/MM/dd HH:mm:ss")) </Today> </PropertyGroup><Target Name="HelloWorld"> <Message Text="$(Today) Hello MSBuild World!" /></Target>
Item
ビルドの入力、通常はファイルを表すCompile/Reference/EmbeddedResource/Content/None…
メタデータを持つSubType/DependentUpon…
Visual Studio のソリューションエクスプローラー でよく見るやつ
Report 用の プロジェクトファイル
コード解析 / テスト / カバレッジを取る用のプロジェクトファイルを作成する
FxCopOpenCoverNunit
http://odashinsuke.hatenablog.com/entry/20120511/1336740574
各種ツールとか
MSBuild Extension Packカスタムタスク等の提供http://www.msbuildextensionpack.com/
MSBuild Explorerプロジェクトファイルの可視化http://www.msbuildexplorer.com/
MSBuild デバッグhttp://blogs.msdn.com/b/visualstudio/archive/2010/07/06/debugging-msbuild-script-with-visual-studio.aspx