当前位置: 首页 > 工具软件 > NAnt > 使用案例 >

NAnt 简介

郦何平
2023-12-01

NAnt 是一个 Visual Studio .Net 应用程序的连编工具,对大而负责的工程而言,使用 NAnt 很方便。

1.      安装

从 http://nant.sourceforge.net 上可以下载源代码或者编译好的二进制文件,一般下载 nant-bin.zip ,解压,注册系统环境变量后,就可以使用 nant 命令了。

2.      Build 文件

XML 格式,每个 build 文件包含一个 project , project 有若干 target ,每个 target 包含若干 task 。 Task 不被包含在 target 中,即直接包含在 project 中。

Ø       Projects (工程)

三个特性, name 、设置工程名称, default 、设置默认 target ,和 basedir 、如果不设置,默认为 build 文件的父目录。

执行 nant 时,可以知道 targets ,如果未指定,执行默认得 target ,如果 build 文件中未指定默认得 target ,仅仅执行全局的 task (全局的 task 总是执行),如果没有全局的 task ,那就什么都不执行了。

Ø       Targets (目标、对象)

有五个特性, name 、指定名称, depends 、此 target 所依赖的 targets (多个用“,”隔开), if 、如果条件为 true 执行此 target , unless 、如果条件为 true 跳过此target , description 、功能的简短描述。其中 name 必须指定。

执行某个 target 时,首先执行此 target 所依赖的 targets 。一个 target 可能被 depends 多次,仅执行一次,但是通过 <call> 任务( task )执行一个 target 时,此target 及其所依赖的 targets 要重新执行一次。另外,当 target 的名称被设置为“ * ”时,称为 wild target ,一个 build 文件仅仅有一个 wild target ,在目前的 build 文件中,当且仅当被调用的 target 不存在时,才执行 wild target ,主要用来处理无效的请求。

Ø       Task (任务)

一块可执行的代码,一个 task 可有多个特性和参数。特性的值可包含对属性的引用,在 task 执行前,这些引用会被解释出来。

Ø       Properties (属性)

一个 project 可有很多属性,这些属性可以通过 <property 任务设置在 build 文件中,也可以设置在 Nant 外。一个属性有一个 name 和一个 value ,可用于 task 的特性中,也可用于表达式,用在 task 的特性中时,使用 ${property name} 格式。 Nant 有很多内建属性(与 nant 有关的,与框架有关的,与平台有关的等)。

<property> 任务有 readonly 和 overwrite 等特性, readonly 指定属性是否是只读到,默认 false , overwirte 指定如果属性已经存在,属性值是否可以重写,默认 true,对于只读属性,是不能被重写的。注意:在 Nant 命令行指定的属性,先于在 build 文件中指定的属性,并且这些属性往往是只读的。

另外可以在 NAnt.exe.config 文件中定义全局属性。

Ø       Loggers & Listeners

Nant 通过 Loggers 和 Listeners 来监控连编过程。 Listeners 记录了 build started , build finished , target started , target finished , task started , task finished , message logged 事件, Loggers 扩展了 Listeners ,可以按 -quiet (静态的,平稳的) , -verbose (详细的) , -debug 三个层次记录连编信息,可输出到控制台或者文件中。 Nant 内建了三个类: NAnt.Core.DefaultLogger 、 NAnt.Core.MailLogger 和 NAnt.Core.XmlLogger 。使用时: -logger :类 -logfile :文件名。可以是普通道文本文件或者 XML 文件。

Ø       Expressions (表达式)

表达式是一种简单而强大的机制,允许写高级的公式,用于 task 的参数和条件式中,这样就可以控制连编过程了。表达式能够访问 project 的属性、调用内建的或者用户定义的functions 。

表达式通过 ${…} 符号,可用于 task 的参数中。也可以使用标准的算术、逻辑和关系运算符。通过 prefix::function-name(argument1, ..., argumentN) 语法调用函数。访问属性,仅需指定其 name ( ${…} )

例子:

访问属性

<property name="build.version" value="3" />

<echo message="The current date is: ${build.version}" />

调用函数

<echo message="The current date is: ${datetime::now()}" />

表达式结果存储

<property name="autoexec-present" value="${file::exists('c:\autoexec.bat')}" />

Real-life expression use

<property name="myprj.basedir" value="c:\" />

<property name="filename" value="${path::combine(myprj.basedir,'version.txt')}" />

 

<if test="${not file::exists(filename) or file::get-length(filename) = 0}">

    <echo message="The version file ${filename} doesn't exist or is empty!" />

</if>

有条件执行 task

<property name="myprj.basedir" value="c:\" unless="property::exists('myprj.basedir')" />

<csc target="library" output="out.dll" ...

     if="${datetime::now() - file::get-last-write-time('out.dll')) > timespan::from-hours(1)}">

...

</csc>

Functions

Nant 提供了操作字符串、日期时间和路径名字的函数,还提供读取文件或者目录属性,访问目前的连编信息等函数。

调用函数语法 prefix::function-name(argument1, ..., argumentN) ,需要的情况下会进行参数类型转换,如果转换有误,会报告错误。

自定义函数可以使用任何 .Net 语言实现,此外还可以通过 <script> 任务实现。

3.      运行 Nant

命令 Nant ,此外还可以指定 build 文件名、 targets 和 properties 等。

Nant

NAnt -buildfile:..\fileName.build

NAnt clean

NAnt -D:debug=false clean dist

 类似资料: