NAnt 是基于 .NET 的 XML 格式开源构建工具,核心元素包括 <project> 根节点、<target> 目标、内置任务(如 <csc>、<copy>)和 <property> 属性;最小脚本需含 <project> 与至少一个 <target>;支持属性注入、依赖声明(depends)、条件执行(if/unless)及外部配置加载。

NAnt 是一个基于 .NET 的开源构建工具,语法采用 XML 格式,结构清晰、可读性强。写 NAnt 脚本的关键是理解其核心元素:根节点 <project>、目标(<target>)、任务(如 <csc>、<copy>、<delete>)以及属性(<property>)。下面直接讲清楚怎么写、怎么用。
基本结构:一个可运行的最小脚本
每个 .nant 文件必须有一个 <project> 根元素,至少包含一个 <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>),大小写敏感,需严格匹配 NAnt 内置任务名。
常用任务写法与典型场景
NAnt 提供大量内置任务,覆盖编译、复制、清理、测试等。以下是高频用法:
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
-
编译 C# 项目:用
<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 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" />; - 命令行覆盖:
nant -D:config=Release build; - 加载外部配置文件:
<property file="build.properties" />(格式为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" /> 显式调用其他目标(不推荐滥用,易破坏依赖逻辑)。

















