nant 是基于 .net 的 xml 格式开源构建工具,核心元素包括 根节点、 目标、内置任务(如 、)和 属性;最小脚本需含 与至少一个

NAnt 是一个基于 .NET 的开源构建工具,语法采用 XML 格式,结构清晰、可读性强。写 NAnt 脚本的关键是理解其核心元素:根节点 <project></project>、目标(<target></target>)、任务(如 <csc></csc>、<copy></copy>、<delete></delete>)以及属性(<property></property>)。下面直接讲清楚怎么写、怎么用。
基本结构:一个可运行的最小脚本
每个 .nant 文件必须有一个 <project></project> 根元素,至少包含一个 <target></target>。以下是最简可用示例:
<?xml version="1.0"?>
<project name="HelloWorld" default="build" basedir=".">
<property name="output.dir" value="bin" />
<p><target name="build">
<mkdir dir="${output.dir}" />
<echo message="Build completed to ${output.dir}" />
</target>
</project>说明:
- default="build" 指定默认执行的目标;
- basedir="." 设定项目基准路径(相对路径以此为起点);
- 属性用 ${name} 引用,支持嵌套表达式(如 ${output.dir}/Debug);
- 任务名即 XML 元素名(如 <mkdir></mkdir>),大小写敏感,需严格匹配 NAnt 内置任务名。
常用任务写法与典型场景
NAnt 提供大量内置任务,覆盖编译、复制、清理、测试等。以下是高频用法:
-
编译 C# 项目:用
<csc></csc>(C# Compiler)<csc target="exe" output="bin/app.exe"> <sources> <includes name="src/**/*.cs" /> </sources> <references> <includes name="lib/*.dll" /> </references> </csc> -
复制文件:用
<copy></copy>,支持通配符和过滤<copy todir="deploy/bin"> <fileset basedir="bin"> <include name="*.exe" /> <include name="*.dll" /> </fileset> </copy> -
条件执行:用
if或unless属性控制任务是否运行<delete dir="obj" if="${build.clean}" />配合命令行传参:nant -D:build.clean=true clean
属性定义与外部参数传递
属性是 NAnt 脚本的“变量”,可在脚本内定义,也可从命令行注入:
- 脚本内定义:
<property name="config" value="Debug"></property>; - 命令行覆盖:
nant -D:config=Release build; - 加载外部配置文件:
<property file="build.properties"></property>(格式为key=value); - 注意:属性一旦设置不可修改(只读),但
-D参数优先级最高。
目标依赖与执行流程控制
用 depends 属性声明目标间的依赖关系,NAnt 自动按拓扑序执行:
<target name="clean" > <delete dir="bin" /> <delete dir="obj" /> </target> <p><target name="compile" depends="clean"> <csc ... /> </target></p><p><target name="build" depends="compile, test"> <echo message="All done." /> </target>
说明:
- depends="clean" 表示执行 compile 前先执行 clean;
- 多个依赖用逗号分隔,顺序不影响执行顺序(NAnt 自动解析依赖图);
- 可用 <call target="xxx"></call> 显式调用其他目标(不推荐滥用,易破坏依赖逻辑)。










