65.9K
CodeProject 正在变化。 阅读更多。
Home

NAnt 入门

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.17/5 (8投票s)

2007年8月10日

6分钟阅读

viewsIcon

57904

downloadIcon

426

编写 NAnt 脚本用于 NDoc、FxCop、NUnit 和 NCoverage。

引言

Nant 是 Dot Net 平台上的脚本工具。它的灵感来自于其 Java 对等程序,Ant。

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 键/值对,可用于以更动态的方式配置任务和目标。属性

值可以从命令行覆盖。

安装说明

从 Nant 网站 http://nant.sourceforge.net 下载 Nant 可执行文件。在撰写本文时,最新版本是 0.85。将可执行文件解压到一个本地目录,例如 C:\Nant\。二进制可执行文件 nant 将存储在 C:\Nant\bin 中,即 Nant.exe。此 exe 将负责执行您的脚本。因此,

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 秒。

输出完成 (消耗 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 上获取更多文档和在线帮助。

祝您脚本编写愉快!。



© . All rights reserved.