1、下载nant,nantcontrib,nunit,vss,fxcop,cruisecontrol.net,nunit2report
2、安装VSS,开发类库项目,单元测试项目,签入到VSS
3、解压nant,nantcontrib,nunit2report,安装fxcop和nunit,把nantcontrib和nunit2report的bin目录下的文件全部拷贝到nant的bin目录下。把nant.exe和fxcop.exe的目录设置到path的环境变量里。
4、建立一个目录,里面建立一个default.build文件和两个子目录,local和result,分别存放在VSS上获取的文件和编译的结果。
5、编写default.build文件,分别建立从vss获取项目文件,编译类库解决方案,编译单元测试解决方案,执行nunit,执行nunit2report,执行fxcop几个任务。最后建立一个bat文件,里面输入nant。运行nant就会自动执行这些任务了。
6、安装cc.net进入server目录,配置ccnet.config文件,运行ccnet.exe
------------
【示例】
1、我创建了D:\WorkTest\DailyBuild\Build目录,其下又创建了result和local目录
2、VSS的ini目录是\\10.2.11.39\vssData\,项目的路径是$/胡浩测试/Bank/,其下签入了个Bank的类库和Test的单元测试类库。
3、D:\WorkTest\DailyBuild\Build的目录下创建一个default.build文件,内容如下
<?
xml version="1.0" encoding="gb2312"
?>
<!--
/*
Default 指将要运行的target的名字。没有调用到的target将不执行。
*/
-->
<
project
name
="TestRemote"
default
="run"
basedir
="."
>
<!--
/*
待编译的解决方案
解决方案路径,及编译后输出路径。
这里一共是两个方案,即待测试项目和测试项目
*/
-->
<
property
name
="Solution.Filename"
value
="D:\WorkTest\DailyBuild\Build\local\bank\bank.sln"
/>
<
property
name
="Solution.Configuration"
value
="DEBUG"
/>
<
property
name
="Build.OutputFolder"
value
="D:\WorkTest\DailyBuild\Build\result"
/>

<
property
name
="Solution.Filename1"
value
="D:\WorkTest\DailyBuild\Build\local\test\test.sln"
/>
<
property
name
="Solution.Configuration1"
value
="DEBUG"
/>
<
property
name
="Build.OutputFolder1"
value
="D:\WorkTest\DailyBuild\Build\result"
/>
<!--
/*
target t1
功能:把VSS里$/下所有文件下载到本地机 D:\WorkTest\DailyBuild\Build\local\ 目录中
User:VSS用户名, password :VSS密码 dbpath:服务器上srcsafe.ini的路径。
*/
-->
<
target
name
="t1"
>
<
vssget
user
="huhao"
password
="huhao"
localpath
="D:\WorkTest\DailyBuild\Build\local\"
dbpath
="\\10.2.11.39\vssData\"
path
="$/胡浩测试/Bank/"
/>
</
target
>
<!--
/*
Target t2 依赖于t1,只要当t1正确执行才能执行t2
功能:编译方案bank.sln
*/
-->
<
target
name
="t2"
depends
="t1"
>
<
solution
solutionfile
="${Solution.Filename}"
outputdir
="${Build.OutputFolder}\"
configuration
="${Solution.Configuration}"
/>
</
target
>
<!--
/*
Target t3
功能: 编译方案test.sln
*/
-->
<
target
name
="t3"
>
<
solution
solutionfile
="${Solution.Filename1}"
outputdir
="${Build.OutputFolder1}\"
configuration
="${Solution.Configuration1}"
/>
</
target
>
<!--
/*
Target run
功能:这个.build文件将要执行的target
Call : 指定本 target将要调用的target的名字,以先后的顺序执行
*/
-->
<
target
name
="run"
>
<
call
target
="t1"
/>
<
call
target
="t2"
/>
<
call
target
="t3"
/>
<
call
target
="nunit"
/>
<
call
target
="fxcop"
/>
</
target
>
<!--
/*
Target nunit
功能:调用nunit并生成扩展名为.xml文件,以此来测试代码。
Outputdir:输入路径设为根目录。
Task nunit2report是将生成的xml文件转化成.html格式,文件查看。
*/
-->
<
target
name
="nunit"
depends
="t3"
>
<
nunit2
>
<
formatter
type
="Plain"
/>
<
formatter
type
="Xml"
usefile
="true"
extension
=".xml"
outputdir
="."
/>
<
test
assemblyname
="D:\WorkTest\DailyBuild\Build\result\test.dll"
/>
</
nunit2
>
<
nunit2report
>
<
fileset
>
<
includes
name
="test.dll-results.xml"
/>
</
fileset
>
</
nunit2report
>
</
target
>
<!--
/*
Target fxcop
功能:调用fxcop这个文件来检测bank.dll这个文件是否符合事先定义好的代码规范,并以
test.xml文件输出。
Commandline: /f指要测试的程序集的路径和名称,/o 指输出XML文件的地址和名称。
*/
-->
<
target
name
="fxcop"
>
<
exec
program
="fxcopcmd"
commandline
="/f:D:\WorkTest\DailyBuild\Build\result\bank.dll /o:test.xml"
/>
</
target
>
</
project
>

4、在D:\WorkTest\DailyBuild\Build目录下新建run.bat,里面输入nant,双击run.bat就会自动运行了。这时会在本目录下生成test.xml,test.dll-results.xml,index.htm几个文件,分别是fxcop的代码分析文件,nunit的的xml报告,和nunit2report转换的html单元测试报告。打开这个htm文件就可以看到当前项目有多少个测试通过了。
5、在ccnet的server目录下修改ccnet.config文件,内容如下,然后运行ccnet.exe,这样就可以在有人签入代码的时候自动运行nant的任务了。
<?
xml version="1.0" encoding="gb2312"
?>
<
cruisecontrol
>
<
project
name
="MyProject"
>
<
webURL
>
http://localhost/ccnet
</
webURL
>
<
schedule
type
="schedule"
sleepSeconds
="6"
/>
<!--
/*
功能:监控VSS里是否有代码改动情况。
Ssdir :本地机VSS的安装目录
Executable:执行服务器上 ss.exe文件
Project: 取得服务器上哪些文件
Username: VSS登陆用户名 password:VSS登陆密码
*/
-->
<
sourcecontrol
type
="vss"
autoGetSource
="true"
>
<
ssdir
>
D:\Program Files\vss\win32
</
ssdir
>
<
executable
>
\\10.2.11.39\vssData\win32\ss.exe
</
executable
>
<
project
>
$/胡浩测试/Bank/
</
project
>
<
username
>
huhao
</
username
>
<
password
>
huhao
</
password
>
</
sourcecontrol
>
<!--
/*
功能:让Nant去执行 d:\test\default.build文件。
Executable:nant.exe文件的绝对路径。
baseDirectory: .build文件的目录。
buildFile: 将要build的文件的名字(nant一次只能执行一个.build文件)。
*/
-->
<
build
type
="nant"
>
<
executable
>
D:\WorkTest\nant\bin\nant.exe
</
executable
>
<
baseDirectory
>
D:\WorkTest\DailyBuild\Build
</
baseDirectory
>
<
buildFile
>
default.build
</
buildFile
>
<
targetList
>
<
target
>
run
</
target
>
</
targetList
>
<
buildTimeoutSeconds
>
300
</
buildTimeoutSeconds
>
</
build
>
<
modificationDelaySeconds
>
10
</
modificationDelaySeconds
>
</
project
>
</
cruisecontrol
>
【链接】
在.NET环境中实现每日构建(Daily Build)--ccnet,MSBuild篇
http://www.cnblogs.com/hjf1223/archive/2006/04/13/374655.html
在.NET环境中实现每日构建(Daily Build)--NAnt篇
http://dragon.cnblogs.com/archive/2005/07/29/203189.html
《DailyBuild全攻略》V1.2版本发布,免费提供下载
http://www.cnblogs.com/coolbug/archive/2004/11/22/66954.html