`
wangleifire
  • 浏览: 510973 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一统天下,使用ANT构建VS.NET工程

阅读更多
对VS.NET工程进行自动构建工作使用什么?也许大家会异口同声的说是NANT。 嗯,NANT无疑是自动构建VS.NET工程最快捷的工具,但对于一个拥有多个编程语言环境的项目,使用专用版的ANT工具却并不是一个好的解决方案,试 想,如果你的项目拥有多个由不同语言开发的模块,那么你可能会同时使用ANT、WANT、NANT来分别管理特定的模块。
当然,这不是我们想看到的,同时维护三个构建工具实在不是什么明智之举(当然,如果你喜欢,那就无可厚非了),其实ANT已经为我们通吃所有语言环境准备好了精兵良驹。
ANT的exec标签是用来执行一个系统命令,这样我们就可以使用开发工具的命令行编译方法来完成相应项目的自动构建工作。下面我们只介绍VS.NET工程的命令行编译方法:
VS.NET开发工具的命令行编译命令是devenv,当然前提是将VS.NET的IDE目录路径放置到PATH变量中。设置好PATH变量,在控制台中键入devenv /?,我们可以看到VS.NET的各个参数说明,如下:
Microsoft (R) 开发环境 7.10.3077 版。
版权所有 (C) Microsoft Corp 1984-2001 。保留所有权利。
 
用法 :
devenv [solutionfile | projectfile | anyfile.ext] [switches]
 
可以调用 devenv ,用第一个参数指定解决方案文件或项目文件。
也可以调用 devenv ,使第一个参数作为要在编辑器中打开的任何
其他类型的文件。如果提供项目文件, IDE 将通过在与项目文件
相同的目录中查找与项目文件具有相同基名称的 .sln 文件,在
解决方案的上下文中打开该项目文件。如果存在 .sln 文件,则
IDE 将查找引用该项目的单个 .sln 文件。如果不存在这样的单
.sln 文件,则 IDE 将创建一个具有默认 .sln 文件名的未保
存的解决方案,而该默认文件名与项目文件具有相同的基名称。
 
命令行生成 :
devenv solutionfile.sln /build solutionconfig [ /project projectnameorfile [ /p
rojectconfig name ] ]
 
可用的命令行开关 :
 
/build          生成指定的解决方案配置
/project        指定生成项目而不是解决方案
                必须指定 /build 才能使用 /project
/projectconfig  指定要生成的项目配置
                必须指定 /project 才能使用 /projectconfig
/out            将生成结果写入指定的文件
/rebuild        /build 类似,但先执行强制清理
/clean          清理生成结果
/deploy         生成指定的解决方案配置然后部署它
/run            运行指定的解决方案配置
/runexit        运行指定的解决方案配置然后终止
/command        启动后执行指定的内部命令行
/mditabs        使用选项卡式文档界面
/mdi            使用 MDI 界面
/fn             使用指定的字体名称
/fs             使用指定的字体大小
/LCID           使用指定的语言 ID
/noVSIP         禁用用于 VSIP 测试的 VSIP 开发人员许可证密钥
/safemode       出于稳定性仅加载默认的环境和服务
/resetskippkgs  允许曾被标记为加载失败的 VsPackages
                再次加载
/migratesettings 迁移另一个版本中的某些用户设置
 
产品特定的开关 :
 
/debugexe       打开要调试的指定可执行文件。
                命令行的其余部分作为它的参数
                传递到此执行文件。
/useenv         使用 PATH INCLUDE LIBPATH LIB 环境变量
                而不是使用 VC++ 生成的 IDE 路径。
 
若要从命令行附加调试器,请使用 :
        vs7jit.exe -p <pid>
可见VS.NET工具为我们提供了诸多支持命令行编译的参数,那接下来我们就开始动手配置Build.xml文件吧,为了节省篇幅,我这里只给出compile任务的代码:
1    <target name="compile" depends="init">
2        <mkdir dir="${pdcu}"/>
3        <echo message="Compiling application main source..."/>
4                 <delete file="${infofile}"/>        
5        <exec dir="${pdir}\" executable="devenv" os="${build.os}" >
6             <arg line=" ${pname}.sln
7                                   /rebuild
8                                   release     
9                                   /useenv
10                                 /out ${infofile}
11                                 "/>
12       </exec>
13     <echo message="Compiling application main source complete."/>
14 <loadfile property="compiled-info"
15            srcFile="${infofile}"/>
16        <echo message="${compiled-info}"/>       
17 <condition property="compile-success">
18      <and>
19       <contains string="${compiled-info}" substring="0 已失败 "/>
20      </and>
21    </condition>
22 <fail unless="compile-success"
23        message="${compiled-info}"/>
24    </target>
我们来详细分析一下上面的代码。
第1行是任务定义,在此不过多解释。
2-4行是任务定义和准备工作,主要是建立编译生成目录和清理旧的输出文件。
5-12行便是命令行编译的主要代码,我们来逐个解释。
第5行定义了一个exec标签,用来调用devenv命令,并指定了编译所在当前目录dir属性,和操作系统信息os属性。
从第6行开始则为devenv命令的参数部分。
其中第6行指定了要编译的解决方案。
第7行标明该解决方案要进行重新编译。
第8行指定了编译类型为release模式。
第9行指定编译器使用 PATH、INCLUDE、LIBPATH 和 LIB 环境变量。
第10行指定了编译信息输出的文件位置。由于devenv命令执行完毕后,ANT无法 从命令行获取编译信息,所以不能使用exec的output属性来指定输出位置(在调用Delphi编译器的时候,ANT可以正常获取编译信息,因此 output属性有效),只能使用编译器所具有的参数功能将信息输出,该信息为判断编译成功与否的关键。
14-15行读取了上述的编译信息文件的内容,以便之后判断编译是否成功。
17-21行则定义了一个编译结果,用于判断编译是否成功。结果使用了contains属性来判断,如果输出文件中包含字符串“0 已失败”,则说明编译成功完成。
22-23行则是指示了ANT,一旦编译失败,则打印出编译信息。
当然,这里只介绍了编译VS.NET工程的其中一种方法,在此抛砖引玉。既然ANT为我们提供了如此强大的系统命令执行功能,那么我们便可以在各种编程语言环境中游刃有余了。
分享到:
评论

相关推荐

    个人网站建设-asp.net

    本论文中,将软件工程的基本原理和方法应用到整个系统,并对其进行需求分析,提出了解决问题的具体方法。在具体制作中,用ASP技术来实现B/S系统,ASP技术与数据库技术结合,用户在浏览器端可以随意查询自己需要的...

    KissU.AdminConsole:KissU管理控制台基于 Ant Design 的 Blazor 实现,开发和服务于企业级后台产品

    Blazor,则是微软推出的基于.NET的Web开发框架,它允许开发者使用C#和Razor语法来构建客户端Web应用,打破了JavaScript一统天下的局面。Blazor的出现,让熟悉.NET生态的开发者能够在不学习新语言的情况下,开发出高...

    三国时期谁一统天下.pdf

    《一统天下》是一款以三国时期为背景的网页游戏,由9u8u发行,旨在带领玩家置身于群雄争霸的动荡时代,扮演一位致力于统一华夏的君主。游戏注重策略与经营,通过精细的画面、丰富的角色设定、多元化的战斗模式、复杂...

    一统天下的秦帝国为何如何短命.doc

    一统天下的秦帝国为何如何短命.doc

    cocos2d-x即时战斗类游戏《战三国》源码

    内附自己搭建的win32工程,因为class中有大量中文字符串,在vs上运行会有中文乱码问题,不影响打包apk,非要在win32下面做开发的同学可以考虑把里面的中文字符串配置到文本里面去或者对class里面的文件进行转码utf-8...

    当处理器一统天下 主板将何去何从.pdf

    《当处理器一统天下,主板将何去何从》这篇技术文档,主要探讨了处理器技术的发展趋势以及其对主板设计的影响。文章以《个人电脑》杂志周年刊为背景,回顾了过去一年处理器领域的重大进展,特别是英特尔公司在技术...

    通达信指标——天人合一(副图).doc

    通达信作为一款广泛使用的股票分析软件,提供了多种技术指标供用户使用。在这些指标中,“天人合一(副图)”是其中的一种,它结合多个变量和函数,旨在帮助投资者深入分析股票市场的趋势和买卖信号。 “天人合一...

    下一代DVD将助蓝紫色半导体激光器一统天下.pdf

    标题中的“下一代DVD将助蓝紫色半导体激光器一统天下”指的是随着技术的进步,蓝紫色半导体激光器在下一代DVD技术中的重要性日益凸显,即将成为该领域的主导技术。描述中的内容进一步确认了这一趋势,提到蓝光和HD ...

    从封邦建国到一统天下PPT课件.ppt

    标题“从封邦建国到一统天下PPT课件.ppt”暗示了这一阶段的核心内容——封建制度的建立与国家统一的过程。描述中提到的问题,如周天子如何巩固统治、分封制的细节,以及社会等级制度,都是西周时期的关键知识点。 ...

    八年级历史与社会上册 4.1(从封邦建国到一统天下)教案 人教新课标版 教案.doc

    八年级历史与社会上册 4.1(从封邦建国到一统天下)教案 人教新课标版 教案.doc

    八年级历史与社会上册 第四单元 第一课《从封邦建国到一统天下》教案 人教新课标版.doc

    八年级历史与社会上册 第四单元 第一课《从封邦建国到一统天下》教案 人教新课标版.doc

    八年级历史上册 第一课 从封邦建国到一统天下 感绵延历史 悟统一大势教学设计 人教新课标版.doc

    八年级历史上册 第一课 从封邦建国到一统天下 感绵延历史 悟统一大势教学设计 人教新课标版.doc

    仿开心网源码分享

    后端开发主要是服务器端的编程,可能使用的技术有PHP、Java、Python等,这些语言常用于构建动态网站并处理用户数据。后端开发者需要了解如何与数据库交互,比如MySQL、MongoDB等,来存储和检索用户信息、好友关系、...

    Wi-Fi、ZigBee、BLE三国杀 谁能一统天下?.doc

    Wi-Fi、ZigBee和BLE是物联网领域中三种主要的无线通信技术,它们各自具有独特的优势和适用场景。...三者各有千秋,未来可能不会出现单一技术一统天下的局面,而是根据应用场景和需求相互补充,共同推动物联网的发展。

    Ajax一统天下之Dojo整合篇

    ### Ajax一统天下之Dojo整合篇 #### 一、引言 随着Web技术的不断发展,Ajax技术的应用越来越广泛,为了提高用户体验,开发者们不断探索更高效、更灵活的前端框架和技术栈。在这个过程中,出现了多种多样的Ajax库、...

    几乎一统天下的液晶电视 却无法攻占80吋以上的市场

    由于大尺寸电视在使用过程中会消耗相当一部分家庭电量,因此,在购买电视机时,消费者必须权衡其色彩效果、画质与功耗指标。以某合资品牌80英寸液晶电视为例,其功耗可达到430瓦特,而更大尺寸的液晶电视,比如100...

    龙虎榜通达信指标公式源码.doc

    Dragon Tiger List通达信指标公式源码的缺点是需要有较强的编程能力和技术分析知识,否则难以理解和使用。 龙虎榜通达信指标公式源码是股票技术分析的有力工具,可以帮助投资者进行投资决策。但是,需要有较强的...

    一整套压型钢板图集atuocad可以打开

    建筑业要带动相关产业发展,...最近在我国建筑工程领域中已经出现了产品结构调整,长期以来混凝土和砌体结构一统天下的局面正在发生变化,钢结构以其自身的优越性引起业内关注,已经在工程中得到合理的、迅速的应用。

Global site tag (gtag.js) - Google Analytics