小工具大智慧


    以前园子里有朋友发过类似这样的文章:.NET必备武器.名称记的不太清楚了,当时觉的很多工具都没有用过甚至是没有听说过.自己觉的只要是会了VS,PowerDesigner,Visio,代码生成工具,基本上没有什么值的求人的地方.至到自己亲身体验过nant这个小工具,我才改变自己的看法。

 

    NAnt 是一个基于 .NET 的生成工具,与当前版本的 Visual Studio .NET 不同,它使得为您的项目创建生成过程变得非常容易。当您拥有大量从事单个项目的开发人员时,您不能依赖于从单个用户的座位进行生成。您也不希望必须定期手动生成该项目。您更愿意创建每天晚上运行的自动生成过程。NAnt 使您可以生成解决方案、复制文件、运行 NUnit 测试、发送电子邮件,等等。遗憾的是,NAnt 缺少漂亮的图形界面,但它的确具有可以指定应该在生成过程中完成哪些任务的控制台应用程序和 XML 文件。注意,MSBuild(属于 Visual Studio 2005 的新的生成平台)为每种健壮的生成方案进行了准备,并且由基于 XML 的项目文件以类似的方式驱动。

 

   本人最近接手了网站打包工作,先解释下什么是网站打包工作:

 

   网站最终运行前,一般都要配置相应的网络环境,服务器环境,软件环境,IIS,最后就是把相应的网站所需文件放进IIS中,这个网站所需文件一般都会压缩成一个包然后上传到服务器,最后放进相应的IIS站点中.而这个包的制作就是我所说的网站打包工作.不知道我说的大家是否明白.

 

   可能大伙一听就觉的这种工作就是一种体力劳动,copy一下就ok了,可是这也要分什么情况,这里我分了两大类情况:

 

   第一大类:你负责打包的站点就一个语言版本,例如:只有中文版.

   第二大类:你负责的站点是多语种版本.例如:有中,英,日等多种语言不同的版本.

 

   第一类又分两种情况:

 

    第一:你就部署一个项目.WEB包中就一个站点.这样是最简单的.这种情况工作量是最小的,只要删除那些cs文件,pdb,文件都行了.

 

    第二:你部署是WEB包中包含多个站点,此时你在部署的时候就相对麻烦,你要每个站点都是复制一次文件(手动),这样重复的copy我想并不是每个人都忍受的了的.而且容易出错.  

 

    第二类也分两种情况:

 

    第一:WEB包中只存在一个项目且存在多种语言,例如:只包含一个电子商务网站,这个网站同时有三种语言版本.这里用一个例子来说明会清晰点,项目project中包含一个文件夹UserControls,它包含了三个控件,分别是:
    LanguageA 中文版
    LanguageB 英文版
    LanguageC 日文版
    Web包会包含这三种不同语言的站点文件
    WebSiteA
    WebSiteB
    WebSiteC
    打包的时候,要把 LanguageA中的内容copy到WebSiteA中,
                         LanguageB中的内容copy到WebSiteB中,
                         LanguageC中的内容copy到WebSiteC中,  

    其它的文件都类似于上面的操作.这样如果是手工去做的话,虽然从技术含量上讲有点微不足道,然而,手工打包枯燥的工作你能否坚持,能否保证文件的正确性.这就是个很大的问题.

 

    第二种情况,WEB包中包存在多个项目网站,这种情况就是第一种情况的叠加,工作量,难度,出错率当然是几何数增加.

 

    基于这种情况,你是否想做一个自动化的程序,让它根据自己的需要来复制相应文件到指定目录中,这样就不用担心复制文件会出错了,而且你也不会因为以前的枯燥工作而感动无聊.

 

    nant工具中的一个小功能正好能够解决以上问题.

 

    首先,我需要创建一个具有 .build 扩展名的 XML 文件

 

Code

 

    可以看出每个build文件都包含一个project标记,这就是一个完整的nant执行工程,简单说明下上面文件中的几个关键字节。


    property:文件配置属性,可以定义些全局变量,文中的base.dir即源文件来路径,指从什么地方来复制文件.deploy.dir为目的文件夹路径,指复制文件最终到什么地方,路径都是相对是nant应用程序.

 

   下面,我需要创建一个 target 标记。一个项目可以包含多个可在 NAnt 运行时指定的 target。这可以理解了project中的一个小project.

 

   copy todir指把源文件复制到指定目录下.

 

   fileset:源文件夹路径配置字节.

 

   include name,指包含的文件类型,只复制符合条件的文件.
       **.*:当前目录下所有文件.
       **/*当前目录下的所有目录也包含文件.

       *.dll当前目录下,后缀为.dll的所有文件.

 

   这里我指用到了nant中tasks中的copy内容,其它详细内容参考:http://nant.sourceforge.net/release/latest/help/fundamentals/

    如何运行这段脚本呢,让人感到失望的是,nant并没有可视化的操作界面,我目前在有dos命令下操作,点击运行,输入cmd,将当前目录导向nant程序目录,然后输入如下脚本:Nant -buildfile:\bin\DeployScripts\build文件存在目录\default.build

如果没有问题会出现下面的运行图.

 

 

 

 

      这样就完成了网站的打包工作,这个时候并没有完,最好是在程序运行完成后,自己查看一下WEB包,看是否都正确,这样可以保证万无一失.

 

      缺点:它在打包的时候,都会根据build文件来复制所有的文件。如果一个网站的某个版本相对稳定,此时只是修改一些小地方,如果这时全部生成WEB包的话,会带来一定的风险性。


      优点:能够准确无误的把要部署的文件打包到相应站点目录中,减少了手工复制枯燥的工作,同时相应节约工时。

 

     总结:是否使用这个工具,主要看自己的具体情况,手工复制不闲麻烦且工作细心的朋友可以不屑此工具。

 

    

     注:本文引用:http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx?pf=true#EA

AAC


posted on 2008-08-26 15:24  min.jiang  阅读(4097)  评论(19编辑  收藏  举报