NAntビルドファイルのテンプレート

普段使っているNAntビルドファイルのテンプレートを晒してみる。

default.build - Download

<?xml version="1.0" encoding="shift-jis" ?>
<!-- PROJECT_NAMEをプロジェクトに合わせて変更してください -->
<project xmlns="http://nant.sf.net/release/0.85/nant.xsd" 
    name="PROJECT_NAME" default="build" basedir="../src/PROJECT_NAME">

    <!-- プロジェクトの名前 -->
    <property name="project.name" value="${project::get-name()}" />
    <!-- フレームワークのバージョン -->
    <property name="framework.ver" value="${framework::get-target-framework()}" />
    
    <!-- ソースディレクトリ -->
    <property name="src.dir" value="./" />
    <!-- 出力ディレクトリ -->
    <property name="output.dir" value="../../bin/${framework.ver}/" />
    <!-- ビルドの種類 -->
    <property name="configuration" value="Release" />
    
    <!-- MSBuildツールのパス(VS2005用) -->
    <property name="msbuild" value="${environment::get-variable('windir')}\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe" />
    
    <target name="build" description="ソースをビルドします" depends="clean">
        <if test="${framework.ver == 'net-1.1'}">
            <solution configuration="${configuration}" outputdir="${output.dir}">
                <projects>
                    <include name="${project.name}.csproj" />
                </projects>
                <!-- 他のプロジェクトの参照 -->
                <!--
                <referenceprojects basedir="../">
                </referenceprojects>
                -->
            </solution>
        </if>
        <if test="${framework::get-target-framework() == 'net-2.0'}">
            <exec program="${msbuild}"
                commandline="/p:Configuration=${configuration};OutputPath=${output.dir} ${src.dir}${project.name}.2005.csproj" />
        </if>
    </target>
    
    <target name="debug" description="ソースをDebugモードでビルドします">
        <property name="configuration" value="Debug" />
        
        <call target="build" />
    </target>
    
    <target name="clean" description="出力ファイルを削除します">
        <if test="${configuration == 'Debug'}">
            <!-- 出力キャッシュを削除する -->
            <delete failonerror="false" dir="${src.dir}bin" />
            <delete failonerror="false" dir="${src.dir}obj" />
        </if>
        
        <delete failonerror="false">
            <fileset basedir="${output.dir}">
                <include name="${project.name}*" />
            </fileset>
        </delete>
    </target>
</project>

Visual Studio 2003と2005に対応している。

前提条件として以下のようなプロジェクト構造をしている必要がある。

[Hoge]
  |―― [bin]
  |       |―― [net-1.1]
  |       |―― [net-2.0]
  |
  |―― [buildfile]
  |       |―― Hoge.build
  |       |―― Hoge.Core.build
  |
  |―― [doc]
  |―― [lib]
  |       |―― [net-1.1]
  |       |―― [net-2.0]
  |
  |―― [src]
  |       |―― [Hoge]
  |       |       |―― Hoge.csproj
  |       |       |―― Hoge.2005.csproj
  |       |
  |       |―― [Hoge.Core]
  |       |       |―― Hoge.Core.csproj
  |       |       |―― Hoge.Core.2005.csproj
  |       |
  |       |―― Hoge.sln
  |       |―― Hoge.2005.sln
  |
  |―― default.build

「src」フォルダ配下には、VSプロジェクト毎のフォルダを作成する。
VSプロジェクトファイルはバージョン毎に作成する。ソリューションファイルも同様。

「buildfile」配下に各VSプロジェクトに対応したビルドファイルを作成する。今回のテンプレートはこれにあたる。
「default.build」ファイルが実際にNAntコマンドで呼び出すビルドファイルになる。このファイルでプロジェクトをどんな組み合わせでビルドするかを決める。

無駄なくすっきりおさまってる気がする。