使用nant

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

Usage : NAnt [options] <target> <target> ...
Options :

-t[argetframework]:<text> Specifies the framework to target
-defaultframework:<text> Specifies the framework to target (Short format: /k)
-buildfile:<text> Use given buildfile (Short format: /f)
-pause[+|-] Pauses before program ends
-v[erbose][+|-] Displays more information during build process
-debug[+|-] Displays debug information during build process
-q[uiet][+|-] Displays only error or warning messages during build process
-e[macs][+|-] Produce logging information without adornments
-find[+|-] Search parent directories for build file
-indent:<number> Indentation level of build output
-D:<name>=<value> Use value for given property
-logger:<text> Use given type as logger
-l[ogfile]:<filename> Use value as name of log output file
-listener:<text> Add an instance of class as a project listener
-ext[ension]:<text> Load NAnt extensions from the specified assembly
-projecthelp[+|-] Prints project help information
-nologo[+|-] Suppresses display of the logo banner
-h[elp][+|-] Prints this message
@<file> Insert command-line settings from a text file.

A file ending in .build will be used if no buildfile is specified.

使用nant,布布扣,bubuko.com

时间: 2024-08-05 03:06:49

使用nant的相关文章

NAnt打包使用MSTest进行单元测试的配置

NAnt比较老的持续集成工具了,对于它的文章都停留在09年左右的,只有一些github上的老项目上可以很多的看见是使用这个进行集成的,估计这个当时老外用的非常多吧. 如题,NAnt如果使用单元测试,用的最多的应该是NUnit,但是VS中新建的测试项目默认的就是MSTest,如果在使用过程中,没有指定MSTest的路径和依赖库,那么编译的时候就会报错,提示无法找到依赖. 想要解决的思路:1.指定依赖项目的路径.2.执行使用exec进行执行. 以下是我收集的资料: http://codeissue.

使用 NAnt 执行外部程序

NAnt 是一个可以帮助我们做自动建构的工具,透过NAnt不但可以自动建构,也可以做很多其他如复制文件,整理文件或建构多个版本等功能.基本上 NAnt 就是打内的 Ant. NAnt 的 Script 是XML,内容是由许多的 Target 组成,如果没有特别指定,默认是会去调用 Build 这个Target. 下面是 NAnt 的范例: 这个范例是使用 MSBuild.exe 去建构 TestApp 这个 solution. 一开始先声明几个变量供后面使用,分别是 _SLNPATH, _SLN

[NHibernate]ISessionFactory配置

系列文章 [Nhibernate]体系结构 引言 在上篇文章学习了orm和nhibernate相关概念,这篇文章主要学习ISessionFactory如何配置. 因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数.不过,大部分都已经有默认值了.NHibernate.Test.dll包含了一个示例的配置文件app.config,它演示了一些可变的参数. 可编程配置方式 NHibernate. Cfg.Configuration的一个实例代表了应用程序中所有的.Net类到

.NetChajian

Code generation(代码自动生成) NVelocity CodeSmith X-Code .NET XGoF - NMatrix / DEVerest Compilation(编译工具) eXtensible C# - ResolveCorp Mono DotGNU - GNU Obfuscation(混淆加密) LSW-IL-Obfuscator - Lesser Software Demeanor for .NET - Wise Owl Salamander .NET Obfus

C#.NET开源项目、机器学习、商务智能

所以原谅我,不能把所有的都发上来,太杂了,反而不好. 1..NET时间周期处理组件 这个组件很小,主要是对时间日期,特别是处理时间间隔以及时间范围非常方便.虽然.NET自带了时间日期的部分功能,但可能还不强大.这个组件就是增强版本.详细功能可以看项目主页的介绍.在CodeProject: http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET 2.OxyPlot绘图组件 OxyPlot是一个.NET跨平台的绘图

C#开源项目大全

商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK Excel-读写组件-ExcelLibrary .NET集成开发环境-MonoDevelop 电话软交换机-FreeSWITCH 开源操作系统-Cosmos 坦克机器人战斗仿真引擎-Robocode GIS控件-MapWindow .NET的ORM框架-MyBatis.NET Web开发工具-Webb

自动化构建1——一致性关键之道

android studio 采用gradle 进行android应用程序的构建,而在eclipse时代,默认是ant,其实java程序也是ant.我不是科班出身,即使是在培训班中,也没有涉及到ant(也许是我那时什么都不懂,没注意?什么时候回顾视频的时候注意下,万一真用上了,这里补上),更不用说是gradle. 什么意思都不知道,以上就提gradle,ant,甚至是maven?多可笑.外国人也是真有意思,喜欢拿个字典里都查不到的单词来作为某一种工具的名字.我们也是,例如城会玩.其实gradle

从程序员到asp.net架构师转变[转]

微软的DotNet开发绝对是属于那种入门容易提高难的技术.而要能够成为DotNet架构师没有三年或更长时间的编码积累基本上是不可能的.特别是在大型软件项目中,架构师是项目核心成员,承上启下,因此 RUP{Rational Unified Process,强调软件开发是一个叠代模型Interative Model),RUP定义了四个阶段(Phase):开端(Inception),阐述(Elaboration),建造(Construction),过渡(Transition)}方法论也认同以架构为核心

23个.NET开源项目

Castle是.NET里走过了三年的开源框架,下载地址如:http://www.castleproject.org/index.html ,当然如果你是从事过JAVA开发并用过spring,hibernate的话,那看这个框架应该说是很清晰.另付上在这个框架上有研究的一些Blog文章:http://terrylee.cnblogs.com/,,看过他整理制作的新版本C#设计模式的人大概知道. Nbear 是另一个.NET开源框架http://nbear.org/ or http://www.co