NAnt 入门






2.17/5 (8投票s)
2007年8月10日
6分钟阅读

57904

426
编写 NAnt 脚本用于 NDoc、FxCop、NUnit 和 NCoverage。
引言
Nant 是 Dot Net 平台上的脚本工具。它的灵感来自于其 Java 对等程序,
NAnt 是一个开源项目,其主页为 http://nant.sourceforge.net。从该页面可以
找到许多资源的链接。此外,NAnt 还有一个名为 NAntContrib 的附属项目。它的主页为 http://nantcontrib.sourceforge.net。该项目用于向 NAnt 贡献未
能进入核心 NAnt 发行版的任务。有时,NAntContrib 中的任务会转
移到 NAnt。
NAnt 术语
在我们深入探讨之前,让我们先澄清一些在讨论过程中将使用的术语:
NAnt
NAnt:构成应用程序的物理可执行文件(以及相关的任务)。
NAnt 脚本/构建脚本/构建文件:一个 XML 文件,描述了一个由一个或
多个目标和零个或多个属性组成的。 (注:此处 Property 翻译为 属性,以便与后面的 Property 概念区分)
项目:构建脚本的根节点。每个脚本都有一个项目。
目标:项目的细分。目标是一项离散的工作,可以包含零个或
多个任务。目标之间可以相互依赖。
任务:任务是 NAnt 将执行的已定义活动;例如,创建目录
或压缩文件。NAnt 内置了许多任务,我们将在第 3 章中介绍其中最实用的
一些。
属性:一个 XML 键/值对,可用于以更动态的方式配置任务和目标。属性
值可以从命令行覆盖。
安装说明
i. 您需要将脚本放在 C:\Nant 文件夹中,或
ii. 将路径 (C:\Nant\bin) 添加到您的 PATH 环境变量中。
使用代码
"Hello World" 示例
考虑以下非常简单的 NAnt 脚本:
<?xml version="1.0" encoding="utf-8" ?>
<project name="HelloWorld" default="go">
<property name="message" value="Hello World!"/>
<target name="go">
<echo message="${message}"/>
</target>
</project>
将此脚本保存为 HelloWorld.build,然后执行以下两项操作之一。要么导航到
保存文件的目录并键入
Nant
或者在命令提示符下使用文件的显式路径,例如
// nant -f:D:\BookCode\Chapter2\HelloWorld.build //
您将获得以下输出:
---------- NAnt ----------
NAnt 0.85
版权所有 (C) 2001-2003 Gerry Shaw
http://nant.sourceforge.net
构建文件:file:///HelloWorld.build
指定的 Target(s):go
go
[echo] Hello World!
构建成功
总时间:0 秒。
项目
项目节点是构建文件的根节点。此节点可以包含任意数量的
<property> 节点、<task> 节点和 <target> 节点。通常,其余的构建文件
现在被定义为属性、目标或目标内的任务。
项目节点属性
name 项目的名称。
default 未提供目标时使用的默认目标。
basedir 所有路径计算的基目录。默认使用
当前目录。
目标
目标用于“模块化”构建文件。目标包含零个或多个按顺序完成的任务
。
目标节点属性
名称
name 属性对目标至关重要,因为目标是通过名称调用的。就这么简单。
description
description 在命令行中使用 –projecthelp 开关时显示,因此
可以为构建文件的用户提供一些帮助。
depends
通过使用 depends 属性,目标可以相互依赖。此属性
接受一个逗号分隔的目标列表,这些目标将在目标执行之前执行
。
<target name="go" depends="foo, bar"/>
这意味着在执行目标 foo 然后目标 bar 之前,目标 go 不会执行。
此外,foo 或 bar 所依赖的任何目标都必须执行。您会很高兴
地注意到 NAnt 可以处理循环依赖,因此以下构建文件将不会执行
。
属性
这些类似于编程语言中使用的变量。它们用作键值对。
NAnt 的重要任务
NUnit
Nant 可用于运行 NUnit 框架编写的单元测试套件。Nant 提供 <Nunit2> 元素用于此目的。(请注意,这里的 2 代表 nunit 框架的版本 2)。示例如下:
<?xml version="1.0"?>
<project name="testNUnit">
<nunit2>
<formatter
type="Xml"
usefile="true"
extension=".xml"
outputdir="C:\NAnt\NUnitResults\" />
<test assemblyname="E:\testing\TestClassLibrary1\\bin\Debug\TestClassLibrary1.dll" />
</nunit2>
</project>
NDoc
NDoc 是一个工具,可用于创建极具表现力
的 MSDN 风格的文档,格式为 Web 或编译的 HTML (CHM),源自
C# 语言的 XML 文档功能。
NAnt 附带了核心
NDoc 程序集,此任务可用于执行相同的操作:
<?xml version="1.0"?>
<project name="TestNDoc">
<ndoc>
<assemblies basedir="E:\testing\ClassLibrary1\ClassLibrary1\bin\Debug\">
<include name="ClassLibrary1.dll" />
</assemblies>
<summaries>
<include name="ClassLibrary1.xml" />
</summaries>
<documenters>
<documenter name="MSDN">
<property name="OutputDirectory" value="C:\MyDocs\NDOC" />
<property name="HtmlHelpName" value="MyProject" />
<property name="ShowMissingSummaries" value="True" />
<property
name="HtmlHelpCompilerFilename" value="hhc.exe" />
<property name="IncludeFavorites" value="False" />
<property name="Title" value="MySystem (NDoc)" />
<property name="SplitTOCs" value="False" />
<property name="DefaulTOC" value="" />
<property name="ShowVisualBasic" value="False" />
<property name="ShowMissingSummaries" value="True" />
<property name="ShowMissingRemarks" value="False" />
<property name="ShowMissingParams" value="True" />
<property name="ShowMissingReturns" value="True" />
<property name="ShowMissingValues" value="True" />
<property name="DocumentInternals" value="True" />
<property name="DocumentProtected" value="True" />
<property name="DocumentPrivates" value="False" />
<property name="DocumentEmptyNamespaces" value="False" />
<property name="IncludeAssemblyVersion" value="True" />
<property name="CopyrightText" value="Etomic 2005" />
<property name="CopyrightHref" value="" />
</documenter>
</documenters>
</ndoc>
</project>
上面的脚本为 base 目录中提到的程序集 classlibrary1 生成了 ndoc。
FxCop
Nant 可用于自动化 fxcop 命令。以下脚本说明了如何操作:
<?xml version="1.0"?>
<project name="testFxCop">
<exec
program="C:\Program Files\Microsoft FxCop 1.35\FxCopCmd.exe"
commandline="/f:E:\testing\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll /o:fxcop.xml"
failonerror="false" />
</project>
请将 program 属性的值替换为您机器上 fxcop 可执行文件的版本。
在 commandline 中指定程序集路径以及所需的输出文件名。
Faileonerror 指示是否在遇到错误时停止进程。
NCover
<project name="testNCover" default="coverage" failonerror="true">
<loadtasks assembly="NCoverExplorer.NAntTasks.dll" />
<target name="coverage" description="代码覆盖率测试运行.">
<ncover
program="C:\Program Files\NCover\Ncover.console.exe"
commandLineExe="C:\Program Files\NUnit-Net-2.0 2.2.8\bin\nunit-console.exe"
commandLineArgs="E:\REL\Test\TestTest\bin\Debug\TestTest.dll"
logLevel="Verbose"
excludeAttributes="CoverageExcludeAttribute">
<assemblies basedir="E:\REL\Test\Test\bin\Debug">
<!-- include this to have only the test.dll reviewed and not the TestTest.dll -->
<include name="Test.dll"/>
</assemblies>
</ncover>
要将选定的类或方法排除在 ncoverage 的审查之外,请使用 CoverageExclude 属性。
public class CoverageExcludeAttribute : Attribute { }
namespace MyApp
{
[CoverageExclude]
Partial class MyClass
{
}
}
将 CoverageExclude 属性添加到您的文件,可以是类或方法的顶部。
这将排除指定的函数或类,使其不被审查。
摘要
希望本文能让您对编写 NAnt 脚本以实现持续集成有一个基本了解。您可以在 http://nant.sourceforge.net 上获取更多文档和在线帮助。
祝您脚本编写愉快!。