相信了解MSF的人都知道Daily build 的重要性,被认为是微软成功的秘诀之一,我从事过很长一段时间的软件产品开发的管理,我也能深深的体会到Daily build 的重要性。我想微软一定有一套专门用来做Daily build 的自动化工具,而我们在没有工具的前提下,最简单可行的方法,无非就是指定一个人,把所有的代码都集中起来,然后打开编译器,输入命令,进行编译。在Ant1.5以后的版本中,提供了.net Tasks 以及 Microsoft vss Tasks。以下我将介绍,使用此二者进行Daily build。
本文中所涉及的软件有:
1. Ant 1.6.5 (http://ant.apache.org)
2. JDK1.5 (http://java.sun.com)
3. MS .net framework 1.0.3705
4. MS VSS
有关软件的安装和配置,在此就不多说明了。只有两点需要特别注意,就是系统PATH的设置中,务必加上csc.exe和ss.exe所在目录,否则ant可能会无法正常执行。另外,有疑问可以参考ant的手册。
以下就是一个C#Web项目的Daily build 实例 build.xml 文件内容:
<project name="MyProject" default="compile" basedir=".">
<property name="src.dir" location="C:/Inetpub/wwwroot/Syanai_1"/>
<property name="out.dir" location="C:/Inetpub/wwwroot/Syanai_1/bin"/>
<property name="reference.dir" location="C:/Inetpub/wwwroot/Syanai_1/bin"/>
<property name="framework.dir" location="c:/WINNT/Microsoft.NET/Framework/v1.0.3705"/>
<property name="ss.dir" location="d:/temp"/>
<!-- 初期化 -->
<target name="init">
<!-- localPath=源文件所在目? serverpath=ss.ini文件所在目? login=用?名,密? vsspath=vss中目?名-->
<vssget localPath="${src.dir}" serverpath="${ss.dir}" login="han,han" vsspath="$/Syanai" writable="true" writablefiles="replace"/>
<vssget localPath="${src.dir}/Manager" serverpath="${ss.dir}" login="han,han" vsspath="$/Syanai/Manager" writable="true" writablefiles="replace"/>
<vssget localPath="${src.dir}/base" serverpath="${ss.dir}" login="han,han" vsspath="$/Syanai/base" writable="true" writablefiles="replace"/>
<vssget localPath="${src.dir}/DbAccess" serverpath="${ss.dir}" login="han,han" vsspath="$/Syanai/DbAccess" writable="true" writablefiles="replace"/>
<vssget localPath="${src.dir}/bin" serverpath="${ss.dir}" login="han,han" vsspath="$/Syanai/bin" writable="true" writablefiles="replace"/>
</target>
<!-- コンパイル -->
<target name="compile" depends="init">
<csc optimize="true" debug="false" warnLevel="4" unsafe="false" targetType="library" incremental="false" destFile="${out.dir}/Syanai.dll" >
<src dir="${src.dir}/base" includes="*.cs"/>
<src dir="${src.dir}/DbAccess" includes="*.cs"/>
<src dir="${src.dir}/Manager" includes="*.cs"/>
<src dir="${src.dir}" includes="*.cs"/>
<reference file="${framework.dir}/System.dll"/>
<reference file="${framework.dir}/System.Data.dll"/>
<reference file="${framework.dir}/System.XML.dll"/>
<reference file="${framework.dir}/System.Web.dll"/>
<reference file="${framework.dir}/System.Drawing.dll"/>
<reference file="${reference.dir}/Mono.Security.dll"/>
<reference file="${reference.dir}/Npgsql.dll"/>
<define name="RELEASE"/>
</csc>
</target>
</project>
该build.xml,主要有两个target ,一个init ,主要负责从vss中获得最新的源文件,而compile,则负责编译。