ms build 触ってみよう

30
MSBuild 触触触触触触 触触触触触触 #31 触触 2015/07/25 SQLWorld 触 触

Upload: oda-shinsuke

Post on 12-Aug-2015

919 views

Category:

Technology


0 download

TRANSCRIPT

MSBuild 触ってみようめとべや大阪 #31 大阪2015/07/25 SQLWorld お だ

自己紹介

織田 信亮 ( おだ しんすけ )大阪で開発者していますSQLWorld の代表です

http://odashinsuke.hatenablog.com/Twitter:@shinsukeoda

アジェンダ

MSBuild 知ってますか?ちょっとだけ詳しく使ってみた!

アジェンダ

MSBuild 知ってますか?ちょっとだけ詳しく使ってみた!

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 を選択

DEMOHello ~

Task

命令の単位メッセージ出力ファイルコピー外部ツールの実行…

後述の Target 内で指定可能

Target

Task を特定の順序でグループ化したものMSBuild は Target 単位での実行

エントリポイントTarget 間の依存関係 / 前後関係の指定も可一般的なものは、提供済みの .targets ファイルにまとめられてる

Property

名前と値のペアTask に値を渡したり、条件評価等で使う

DEMO.targets を作成する

おさらい

Task命令の単位

Target実行する単位で Task の実行順序をまとめたもの

Property名前と値のペア

アジェンダ

MSBuild 知ってますか?ちょっとだけ詳しく使ってみた!

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 のソリューションエクスプローラー でよく見るやつ

DEMOVS でビルドしても必ずエラーになる

アジェンダ

MSBuild 知ってますか?ちょっとだけ詳しく使ってみた!

Report 用の プロジェクトファイル

コード解析 / テスト / カバレッジを取る用のプロジェクトファイルを作成する

FxCopOpenCoverNunit

http://odashinsuke.hatenablog.com/entry/20120511/1336740574

DEMOSQL ファイルのコード規約検証

ScriptDom

T-SQL のパーサー / ジェネレーターMS が .NET のライブラリとして提供インストール

SQL Server Feature Pack NuGet

各種ツールとか

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

まとめ

MSBuild は XML ベースで設定するビルドツールVisual Studio での設定も込み知らなくても特に問題無いけど、知ってると役に立つことも