本文共 2163 字,大约阅读时间需要 7 分钟。
应用于.net平台的项目构建工具,类似Ant ,使用其可以完成.net平台的项目进行自动化的、可重复的创建过程,其中包括每天运行多次的自动化测试,以及生成result report
我为什么使用它:
他可以是使我的系统在添加新功能时可以以热插拔方式进行,并且可以自由组合我定义所有任务的执行顺序。非常灵活
<?xml version="1.0"encoding="gb2312"?>
<project name="Projects"default="prebuild">
<targetname="prebuild" depends="namecheck,clean "description="…">
……
</target>
<targetname="namecheck" >
……
</target>
</project>
说明:encoding="gb2312"使得脚本文件可以支持中文
<project>标签定义了项目属性,一个脚本文件只能有一个项目定义default="prebuild"说明该项目缺省从prebuild任务开始执行
<target>标签定义了一项任务,任务是Nant脚本具体执行动作的最小单元
depends="namecheck,clean "说明该任务执行前需要namecheck和clean任务先执行
description描述了该任务的一些说明性信息
<property name="<变量名>"value="$<变量值>"/>
要使用已经定义的变量,可以用${<变量名>},要使用内建函数,可以使用${<函数名称>}
<property name="PROJECT_NAME"value="WebTestProject" />
<property name="PROJECT_VER"value="${PROJECT_NAME}" />
<property name="curdir" value="${directory::get-current-directory()}"/>
可以创建一个外部的,同样以build为文件名的文件,定义若干常量,在主文件中引用他们。
<?xml version="1.0"encoding="utf-8"?>
<project name="External">
<property name="EXT_NAME" value="external value infile external.build."/>
</project>
将上述xml片段保存为c:/2.build,同时,在1.build中加入:
运行结果
在Nant 脚本文件中也可以调用其他可执行程序
比如我们打开使用Notepad 打开文本文件
<target name="RunNotePad">
<exec program="Notepad.exe">
<argvalue="c:/new.txt" />
</exec>
</target>
<execprogram="c:/Notepad.exe"> 为要执行的可执行程序的路径
<arg value="c:/new.txt"/> 为Notepad.exe的参数,如有多组参数,则需多组<arg value= />
执行结果
如果一个buildfile中有多个target,并且他们之间有依赖关系,就可以用depends属性来维护。例如:
1. <target name="A">
2. <target name="B" depends="A" />
3. <target name="C" depends="B,A" />
4.
5. <target name="D" />
6. <target name="E" />
7. <target name="F" depends="D, E, A" />
执行targetB的执行顺序是:A->B;而执行targetC的顺序是: A->B->C;执行targetF的顺序是:D->E->A。
Nant同样支持条件测试,通过内置的或自定义的函数,进行一些判断,当条件符合时,就执行相应的任务。
<targetname="TestCondition">
<if test="${string::contains(PROJECT_VER,'001')}">
<echomessage="current project version is 001, we need to dosomething..."/>
<call target="RunNotePad"/>
</if>
</target>
运行结果
通过使用-D:<name>=<value> 来进行参数的传递
<target name="Workspace">
<if test="${property::exists('workspace')}">
<echomessage=" workspace is ${workspace}"/>
</if>
</target>
运行结果