Nant学习总结

Nant学习总结前言: NAnt是一项开源的项目,是一个基于 .NET 的生成工具。利用NAnt,你可以方便快捷地对自己.NET项目或解决方案进行自动构建。 正文: 1, 工具及配置 a) Nant: 完成代码的自动编译,自动运行测试工具。 下载地址:http://nant.sourceforge.net

前言:

     NAnt是一项开源的项目,是一个基于 .NET 的生成工具。利用NAnt,你可以方便快捷地对自己.NET项目或解决方案进行自动构建。

正文:

1, 工具及配置

a)       Nant: 完成代码的自动编译,自动运行测试工具。

下载地址:http://nant.sourceforge.net/builds/

b)       NantContrib:自动从源码库中获取源代码

下载地址:http://nantcontrib.sourceforge.net/nightly/builds/

c)       NUnit2Report:将NUnit测试工具产生的XML报告转换为HTML报告形式

下载地址:http://nunit2report.sourceforge.net/

d)       NUnit:单元测试工具

下载地址:http://nunit.sourceforge.net/

e)       Fxcop代码分析工具

下载地址:http://www.gotdotnet.com/team/fxcop/

     这三个工具(组件)只需要下载zip压缩文件即可,下载完成后,解压就可以用。

     接下来配置nant的环境变量:

     在系统目录下添加一个NAnt.bat文件,编辑此文件内容如下:

     @echo off

“F:\Test\CITest\nant-0.85\bin\NAnt.exe” %*

     这个”F:\Test\CITest\nant-0.85\bin\NAnt.exe”是解压后的NAnt.exe的物理路径,保存OK。

 然后,将nantcontrib-0.85\bin和NUnit2Report.fix.chs.1.0\bin下面的文件拷贝到nant-0.85\bib下面去。这样,我们的工具就可以使用了。

2, 初级应用–Hello World

建立一个default.build文件,XML格式。内容如下:

<?xml version=1.0encoding=gb2312?>

<project name=Testdefault=runbasedir=.>

 <target name=run>

       <call target=HelloNant/>

       <call target=HelloWorld/>

 </target>

 <target name=HelloNant>

       <echo message=Hello Nant/>

 </target>

 <target name=HelloWorld>

       <echo message=Hello World/>

 </target>

</project>

保存后,打开“命令提示符”,进入到default.build所在的目录,然后输入nant,回车将会看到下图的界面:

 

Nant学习总结

下面,我们来看看这个build文件:

1,   project:每个build文件只包含一个project,它含有一系列的target。

a)        name为项目名称

b)        default表示项目默认的target,此示例为run,可选

c)        basedir=“.”表示基准目录为当前目录

2,   target:定义一项任务,target是NAnt脚步具体执行动作的最小单位,包含一系列的task。Name是target的名称,必选。

3,   echo:是一个task,用来显示一个特定的字符串,message表示要显示的字符串。

4,   call: 是一个task,表示调用那个target。

5,   encoding=”gb2312″使得脚本文件可以支持中文

OK,我们第一个Demo完成了。

3, 高级应用—日构建

a)       简单build文件

建立文件HelloWorld.cs,编写代码,内容如下:

using System;

namespace HelloWorld

{

    public class HelloWorld

    {

        static void Main()

        {

            Console.WriteLine(“Hello World”);

        }

    }

}

修改default.build文件,内容如下:

<?xml version=1.0encoding=gb2312?>

<project name=Testdefault=runbasedir=.>

     <target name=run>

         <!–<call target=”HelloNant”/>–>

         <!–<call target=”HelloWorld”/>–>

         <call target=implement/>

     </target>

     <target name=build>

         <mkdir dir=bin/>

         <csc target=exeoutput=bin\HelloWorld.exe>

              <sources>

                   <includes name=HelloWorld.cs/>

              </sources>        

         </csc>

     </target>

     <target name=implementdepends=build>

         <exec program=bin\helloWorld.exe/>

     </target>

     <target name=clean>

         <delete dir=binfailonerror=false/>

     </target>

     <target name=HelloNant>

         <echo message=Hello Nant/>

     </target>

     <target name=HelloWorld>

         <echo message=Hello World/>

     </target>

</project>

         在命令行里运行nant,如下图:

        

Nant学习总结    

     编译成功,这时,在F:\Test\NAntTest(我的示例所在的路径)会建立一个bin的文件夹,同时,会产生HelloWorld.exe文件。

下面,我们来看看这个build文件:

1)      mkdir:在当前目录下建立一个名为“bin”的文件夹

2)      csc:和Visual Studio .Net中的csc一样,运行.cs的程序。

Target:我输入的程序类型

Output:输出文件地址和名字

3)      sources:源文件地址

4)      delete:删除目录及里面的所以文件。 我们可以通过nant clean这样的方式去执行clean这个target

5)      failonerror:属性表示即使操作文件夹的过程中出现了错误,也忽略错误向下执行

6)      exec:执行外部程序。

b)       build解决方案

现在假设我们有两个解决方案(Visual Studio 2003的解决方案),目录名为Test1和Test2,放在与default.build相同的根目录里,然后编辑default.build文件,内容如下:

<?xml version=1.0encoding=gb2312?>

<project name=Testdefault=runbasedir=.>

     <property name=Solution1.Filenamevalue=F:\Test\NAntTest\test1\test1.sln/>

     <property name=Solution1.Configurationvalue=DEBUG/>

     <property name=Build1.OutputFoldervalue=F:\Test\NAntTest\result\/>

     <property name=Solution2.Filenamevalue=F:\Test\NAntTest\test2\test2.sln/>

     <property name=Solution2.Configurationvalue=DEBUG/>

     <property name=Build2.OutputFoldervalue=F:\Test\NAntTest\result\/>      

     <target name=run>

         <!–<call target=”HelloNant”/>–>

         <!–<call target=”HelloWorld”/>–>

         <!–<call target=”implement”/>–>

         <call target=build1/>

         <call target=build2/>

     </target>

     <target name=build1>

         <solution solutionfile=${Solution1.Filename}outputdir=${Build1.OutputFolder}test”configuration=${Solution1.Configuration}/>

     </target>

     <target name=build2>

         <solution solutionfile=${Solution2.Filename}outputdir=${Build2.OutputFolder}test”configuration=${Solution2.Configuration}/>  

     </target>

     <target name=build>

         <mkdir dir=bin/>

         <csc target=exeoutput=bin\HelloWorld.exe>

              <sources>

                   <includes name=HelloWorld.cs/>

              </sources>        

         </csc>

     </target>

     <target name=implementdepends=build>

         <exec program=bin\helloWorld.exe/>

     </target>

     <target name=clean>

         <delete dir=binfailonerror=false/>

     </target>

     <target name=HelloNant>

         <echo message=Hello Nant/>

</target>

     <target name=HelloWorld>

         <echo message=Hello World/>

     </target>

</project>

下面,我们来看看这个build文件:

1)      property:name属性定义了变量的名称,value属性定义变量的值,其中name属性可以使用字母、数字、点号、下划线等符号,而value属性可以使用字符串或是已经定义的变量。Solution1.Filename中的value是解决方案的地址。Solution2.filename同理

Solution1.Configuraton中的value为编译的方式

Build1.OutputFolder为输出的文件地址

2)      solution:编译解决方案。

如果是vs.net 2003的项目的话,应该会成功(我没有装2003 所以不知道),可是我的项目是vs.net 2005编译的时候不成功,如下图:

 

Nant学习总结

后来才知道Nant不支持Visual Stuido .net 2005。怎么解决呢?“百度一下,你就知道”

MsBuild的使用方法:

在命令行里面输入

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe “F:\Test\NAntTest\Test1\test1.sln” /t:Build /p:Configuration=Debug

效果:

 

Nant学习总结

说明:

/t:Rebuild|Clearn 生成目标
/p:Configuration=Debug|Release 项目属性
/l:FileLogger,Microsoft.Build.Engine;logfile=Build.log 编译日志
/clp:PerformanceSummary 显示任务、目标和项目花费的时间

但是在NAnt里面怎么用这个呢?还记得吗?有这个task—- exec。我们可以将要编译的解决方案放入一个批处理文件里面,然后用NAnt的exec去调用执行。 

建立一个批处理文件msbuild.bat,文件内容如下:

@echo off

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe “F:\Test\NAntTest\Test1\test1.sln” /t:Build /p:Configuration=Debug

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe “F:\Test\NAntTest\Test2\test2.sln” /t:Build /p:Configuration=Debug

 修改default.build,去掉原有的solution相关的内容,脚步如下:

<?xml version=1.0encoding=gb2312?>

<project name=Testdefault=runbasedir=.>

     <target name=run>

         <!–<call target=”HelloNant”/>–>

         <!–<call target=”HelloWorld”/>–>

         <!–<call target=”implement”/>–>

         <call target=msbuild/>

     </target>

     <target name=msbuild>

         <exec program=msbuild.bat/>

     </target>

     <target name=build>

         <mkdir dir=bin/>

         <csc target=exeoutput=bin\HelloWorld.exe>

              <sources>

                   <includes name=HelloWorld.cs/>

              </sources>        

         </csc>

     </target>

     <target name=implementdepends=build>

         <exec program=bin\helloWorld.exe/>

     </target>

     <target name=clean>

         <delete dir=binfailonerror=false/>

     </target>

     <target name=HelloNant>

         <echo message=Hello Nant/>

     </target>

     <target name=HelloWorld>

         <echo message=Hello World/>

     </target>

</project>

运行nant,效果如下图:

 

 

 

Nant学习总结

Nant学习总结

c)       从源代码管理器上获得代码

只需要添加这个target即可,然后去run这个target里面调用就可以了。这样,我们在运行nant的时候,就会先去服务器端获取代码,然后再去执行其他操作。

<target name=getCodeFromVss>

         <vssget username=usernamepassword=******recursive=truereplace=true localpath=F:\Test\NAntTest\Test1dbpath=D:\SourceSafe6.0d\TEST1\srcsafe.inipath=$//>

</target>

说明:在用这个功能之前必须确保将NAntContrib目录下bin文件夹里的所有文件都拷贝到NAnt安装目录下的bin文件夹里, 这样默认没有vssget task的NAnt里就具可以调用vssget task了

vssget:是NAntContrib的语法,用来从VSS源码管理器上下载源代码,user和password属性表示登录VSS服务器的信息;Localpath属性是指下载的源代码存放的路径;recursive=”true”表示递归获取代码;replace=”true”表示如果本地有重复文件,则进行覆盖;dbpath定义VSS的srcsafe.ini文件的路径信息,包括srcsafe.ini文件名;path定义了要获取的源代码在VSS数据库中的路径,一般都是以$/为根目录。

d)       运行单元测试

首先,将我们的项目Test1中添加要进行单元测试的类,名为NUnitTarget.cs,代码如下:

using System;

using System.Collections.Generic;

using System.Text;

using NUnit.Framework;

namespace Test1

{

    [TestFixture]

    public class NUnitTarget

    {

        [Test]

        public void Test()

        {

            Assert.AreEqual(1, 1);

        }

    }

}

十分简单,仅做测试用。Ok,编译解决方案,用Nunit.exe打开Test.exe,点击按钮“run”,效果如图:

 

 

Nant学习总结

这只是用Nunit这个工具,去进行,我们要做的是在NAnt里面自动的进行单元测试。OK,编写我们的default.build,

          <target name=NUnit>

              <nunit2>

                   <formatter type=Xmlusefile=trueextension=.xmloutputdir=./>

                   <test assemblyname=F:\Test\NAntTest\Test1\Test1\bin\Debug\Test1.exehaltonfailure=false />

              </nunit2>

</target>

运行nant后,效果如下图:

 

 

Nant学习总结

说明::<formatter>标签中,type=”Xml”表明了根据测试结果生成XML结构化信息,usefile=”true”表明使用文件保存测试结果,extension=”.xml”表明生成的文件扩展名为xml,outputdir指出了文件将被保存到哪个目录

Test标签中的assemblyname表明了被测试的dll程序集的路径信息,haltonfailure=”false”表明即使测试没有通过仍然继续执行脚本文件

这样在测试命令完成后,会在outputdir指出的目录下生成一个XML形式的报告文件,名为Test1.exe-results.xml(格式为:Test1.exe+‘-’+results.xml)。为了增加测试结果的可读性,可以使用另一个工具NUnit2Report,将测试结果转换为直观的HTML文件。

脚本如下:

<nunit2report todir=F:\Test\NAntTest>

              <fileset>

                   <includes name=Test1.exe-results.xml/>

              </fileset>

</nunit2report>

运行nant,效果如图:

 

 

Nant学习总结

此时会在目录F:\Test\NAntTest下面产生一个文件index.html(好像可以指定,我现在还不知道怎么指定),打开这个文件如图所示:

 

 

Nant学习总结说明:includes标签用来搜索符合条件的XML文件,转换出来的HTML文件保存为out指出的文件名(好像可以指定文件名,但我指定的时候有错误,提示:Unexpected attribute “out” on element <nunit2report>),todir指出了HTML文件将保存的目录信息

e)       检查代码规范

安装以后,配置一下环境变量,这样在哪里都可以调用到fxcopcmd了。在系统目录的C:”WINDOWS下面建立一个fxcopcmd.bat的批处理文件,编辑内容如下:

@echo off

“D:\Program Files\Microsoft FxCop 1.36\FxCopCmd.exe” %*

保存OK。 

Fxcop的应用:

打开Microsoft FxCop 1.36,新建一个project,然后添加targets,将我们的项目Test1中bin下的Test1.exe添加进来,然后保存成Test1.Fxcop.同理将Test2保存成Test2.Fxcop.

然后编写default.build文件:

<target name=fxcop>

         <exec program=Fxcopcmd /project:F:\Test\NAntTest\Test1.Fxcop /out:F:\Test\NAntTest\Test1-Fxcop.xml/>

         <exec program=Fxcopcmd /project:F:\Test\NAntTest\Test2.Fxcop /out:F:\Test\NAntTest\Test2-Fxcop.xml/>

</target>

运行nant,出错,效果如下图:

 

 

Nant学习总结

可是如果我单独运行Fxcopcmd /project:F:\Test\NAntTest\Test1.Fxcop /out:F:\Test\NAntTest\Test1-Fxcop.xml就没有问题,而且会产生一个xml文件。突然想起来,将它们放入批处理文件中,建立两个批处理文件:Test1fxcp.bat和Test2fxcop.bat。

内容就是

Fxcopcmd /project:F:\Test\NAntTest\Test1.Fxcop /out:F:\Test\NAntTest\Test1-Fxcop.xml

Fxcopcmd /project:F:\Test\NAntTest\Test2.Fxcop /out:F:\Test\NAntTest\Test2-Fxcop.xml

这是直接在default.build里面调用这两个批处理,形如:

          <target name=fxcop>

              <exec program=Test1Fxcop.bat/>

              <exec program=Test2Fxcop.bat/>

</target>

运行nant,效果如图:

 

 

Nant学习总结

用IE打开产生的xml文件,效果图如下:

 

 

Nant学习总结

OK,搞定。

说明:

Project:是用Microsoft FxCop 1.36产生的project。

Out:是输出路径

         或者:

              两个批处理文件中的内容如下:

Fxcopcmd /f:F:\Test\NAntTest\Test1\Test1\bin\Debug\Test1.exe /out:F:\Test\NAntTest\Test1-Fxcop.xml

Fxcopcmd /f:F:\Test\NAntTest\Test2\Test2\bin\Debug\Test2.exe /out:F:\Test\NAntTest\Test2-Fxcop.xml

         同样可以。这样就不需要我们使用Microsoft FxCop 1.36去建立两个project了。很方便。

         说明:

              f:应该是要审查的文件

              out/o:输出路径

 

现在告一段落,以后会陆续补充 

参考:

     http://www.cnblogs.com/coolbug/archive/2004/07/21/26211.html

     http://www.cnblogs.com/mywebname/articles/600278.html

     http://www.cnblogs.com/coolbug/articles/27735.html

多谢CoolBug,在他那里,我学到了不少的东西。谢谢。

 

 

作者:冰碟
出处:http://www.cnblogs.com/icebutterfly/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

 

 

 

今天的文章Nant学习总结分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/54287.html

(0)
编程小号编程小号
上一篇 2023-08-29
下一篇 2023-08-29

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注