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>