NAnt から MSBuild にプロパティを渡す方法
.NETを使っているとほとんどのことは NAnt でできるけど、「発行」とかは MSBuild じゃないとできない。じゃあ MSBuild に乗り換えよう、と思ってもできる事が少なすぎて乗り換えられない。なので多機能な NAnt から必要な機能だけを MSBuild に提供してもらうことにした。その場合 NAnt から MSBuild にプロパティを渡せると便利なのでメモ。
NAnt のビルドファイル nant.xml
NAnt から MSBuild にプロパティを渡して呼ぶだけのビルドファイル。
MSBuild の引数には /t:TargetName で MSBuild のターゲット名を、/p:PropertyName=PropertyValue でプロパティ値を指定できる。プロパティ値を複数渡したいなら /p:PropertyName1=PropertyValue1;PropertyName2=PropertyValue2 というようにセミコロンで区切ってやればいい。PropertyValue2 の後にセミコロンを付けるとエラーになるので注意。
<?xml version="1.0" encoding="utf-8"?> <project name="CallingMsbuild" default="build" basedir="."> <property name="msbuild.xml" value="msbuild.xml"/> <property name="hoge.dir" value="c:/hoge"/> <target name="build"> <exec program="C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe" commandline="${msbuild.xml} /t:build /p:HogeDir=${hoge.dir}" /> </target> </project>
MSBuild のビルドファイル msbuild.xml
NAnt から渡されたプロパティ使ってディレクトリを作るだけのビルドファイル。
MSBuild の場合、プロパティは{}(中括弧)でなくて()(小括弧)で囲む。プロパティ名に.を含むとエラーになるようだ。
VS2005で編集すると
<?xml version="1.0" encoding="utf-8"?> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <HogeDir /> </PropertyGroup> <Target Name ="build"> <MakeDir Directories="$(HogeDir)" /> </Target> </Project>