NAnt 与 MS Build

大家可能已经知道.net 2.0将会集成一个build tool:msbuild,当然,大家也知道,这明显的同.net社区中的nant功能重合。在此事上,我个人极度反感微软的做法。让我们来看看,如果java没有apache软件基金会的一些项目,java会像有这样的影响力? 微软真正的做法应该像sun将servlet和jsp引擎源代码捐赠给apache软件基金组织或是像ibm捐赠eclipse一样。让nant开发团队来做msbuild。毕竟,.net的发展很大程度上决定于.net社区的活跃层度。

关于msbuild的细节,我们可以从pdc 的session中了解 下载该ppt
随该ppt提供的sample带有一些文档,对msbuild进行了较为详细的介绍,这可能是当前惟一的msbuild的介绍资料了

无论是msbuild或是nant,都非常简单易用,msbuild除了build新格式的项目文件外,还能编译vs 2003的项目文件。从功能上来说nant现在要丰富一些,但msbuild将来绝不会逊色于nant,未来,估计nant只会在mono项目中拥有一席之地,我替nant感到难过:(

msbuild和nant均使用xml格式保存项目文件,从总体上语义类似,如根元素project,主要的tag: target等,但从文件格式上两者是不兼容的,下面说明以下主要的结构上的区别,方便大家同时掌握此两者。

元素命名
msbuild 使用Pascal命名法,nant使用纯小写

属性(property)

1、声明
nant:
<property name="propertyname" value="propertyvalue"/>

msbuild
<Property propertyname="propertyvalue"/>
2、使用
nant:
${propertyname}
msbuild
$(propertyname)

msbuild还有(PropertyGroup)属性组的概念

任务(task)
nant和msbuild的task模式不同,nant是每个任务一个标记,如
<csc output="hello.exe" target="exe">
....
</csc>

而msbuild则只有一个标记task,通过name属性来进行区别
<Task Name="CSC">
....
</Task>
同nant类似,msbuild允许你通过继承Task来创建自己的Task

FileSet vs Item
nant使用FileSet的概念,比方说,以下说明需要编译的文件,其中references,sources就是FileSet
<project name="testmsbuild" default="Build">
<target name="Build">
<csc target="exe" output="test.exe">
 <references>
  <includes name="bin\mydll.dll"/>
  <include name="bin\mydll2.dll"/>
 </references>
 <sources>
  <includes name="test.cs"/>
  <includes name="person.cs"/>
 </sources>
</csc>
</target>
</project>
msbuild使用Item的概念,用type属性来区别,允许多个同type的Item,如果使用@(typename)引用则成为ITaskItem Array,像Soruces,References 都接受ITaskItem Array(string array 是通过;分隔来实现的)
<Project  DefaultTargets="Build">
 <Item Type="CSFile" Include="msbuild.cs"/>
 <Item Type="Reference" Include="Person.dll"/>
 <Target Name="Build">
  <Task Name="CSC" Sources="@(CSFile)"  OutputAssembly="testmsbuild.exe" TargetType="exe" References="@(Reference)"/>
 </Target>
</Project>

个人看法

就我自己而言,我还是喜欢nant,当然,主要是msbuild当前仅提供有限的功能。而nant,似乎已经到了无所不能的境界,大家用用便知。

posted on 2003-12-21 21:03:44

Reader Comments

标题: re: NAnt 与 MS Build
名字: jjx
发表时间: 2003-12-25 14:35:14
msbuild项目文件是采用xml格式,其元素是pascal命名法,这不仅不同于nant,而且同现在.net 配置文件的命名也不相同。

创建task 的过程很简单,像nant的许多功能都可以通过简单的扩展来得到,我新写了一个简单的介绍,你可以看看 www.soho-works.net/BLOG/286.asp

标题: re: NAnt 与 MS Build
名字: maddog
发表时间: 2003-12-25 10:37:17
msbuild的元素名称有大写?
windows系统本身就不怎么区分大小写.
build文件居然还要弄出个大写.

最近关注这些东西.请教一个问题:
比如我想在build文档里面添加一个task,然后我在扩展build工具以实现这个task. 似乎不好实现?

谢谢.

posted on 2004-07-15 19:53 浙林龙哥 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/huqingyu/archive/2004/07/15/24596.html

NAnt 与 MS Build相关推荐

  1. .NET开源社区存在的问题

    12月9日, Oren Eini ,以色列的一位热衷于.NET开源项目的开发人员,在他的Blog上写了一篇文章分析了.NET开源社区存在的问题,文章的题目是:The Problem of Open S ...

  2. Resharper4.5:增强你的.net开发

    Resharper4.5:增强你的.net开发 介绍 无庸置疑,ReSharper是最智能化的微软Visual Studio插件.它包括一系列丰富的能大大增加C#和Visual Basic.net开发 ...

  3. 我们谈一谈 Resharper

    一.ReSharper介绍 是一个JetBrains公司出品的著名的代码生成工具.其能帮助Microsoft Visual Studio成为一个更佳的IDE,它包括一系列丰富的能大大增加C#和Visu ...

  4. 实用的visual studio插件,值得收藏

    1.ReSharper(VS必装,代码重构.代码修正功能) ReSharper 是一个JetBrains公司出品的著名的代码生成工具.其能帮助Microsoft Visual Studio成为一个更佳 ...

  5. [转]Nant daily build实践

    本文转自:http://www.cnblogs.com/moonvan/archive/2006/11/07/552585.html 折腾了一个周,基于Nant的VS.NET项目每日构建终于成功了,在 ...

  6. 循序渐进——NAnt构建实例

    前言 NAnt,一款大名鼎鼎的.NET开源构建工具,功能强大,易于定制. 悲催的是开源的工具往往文档匮乏,广大程序猿们有时发现了看起来很酷的工具,可迟迟无法上手,时间就这么被残酷地浪费掉了. 在园子里 ...

  7. Delphi 2007体验!

    Delphi 2007体验! baidu 内容摘要:CodeGear(From Borland) 公司公布了最新的Delphi 2007 For Win32版本号.作为一个 Delphi 的使用者,第 ...

  8. Windows phone 应用开发[3]-UI 设计

    本篇来谈谈Windows phone UI设计.这个有点让我痛苦的话题. 其实谈到移动平台的设计.原来没有实际接触Windows phone 产品开发工作时对UI设计这个概念不是特别强烈. 并没有感到 ...

  9. ARM嵌入式平台性能测试

    在新项目需要选择一个全新的基于ARM嵌入式处理器平台的时候,难免会需要对新平台的性能进行评估,这时候有几种思路可以进行参考,一是ARM芯片厂家发布的性能指标,不过大多数是基于理论情况;二是购买同样平台 ...

最新文章

  1. 重载和覆盖的区别?(overload vs override)
  2. 什么是内卷?华为内部这篇文章读懂
  3. Java----前端验证之验证码额实现
  4. Mybatis学习笔记13 - 动态sql之set标签
  5. 2013年上半年工作总结,哇哈哈哈,给自己看的。
  6. notepad 没有plugin manager_和平精英巅峰赛正式开启,热度却没有象中那么高!
  7. Android xmlns 的作用及其自定义
  8. 【CVTE Web后台开发实习生2019.12.05在线笔试】总结
  9. Linux下redis基本安装配置(CentOS7)
  10. 2014-7 Andrew Ng 自动化所报告听后感
  11. undefined reference to `crypto_get_random'
  12. 为什么会存在乱码?什么是编解码?为什么会有这么多字符集?
  13. Comma Separated Values Format
  14. C++学习(第二篇)//最详细C++运算符经验
  15. TCP 与UDP 的区别
  16. Docker镜像讲解,教你如何自制并上传一个镜像
  17. 世界上最快的浏览器(mxnitro浏览器)
  18. 真正的成功(约翰·伍登)
  19. 这本书为什么会被誉为Spring开发百科全书(文末附带源码视频)
  20. 基于JAVA实现的纸牌游戏

热门文章

  1. 登录之回车登录和记住密码
  2. HNUSTOJ-1675 Morse Code(DFS+字典序搜索)
  3. 异步tcp通信——APM.Core 服务端概述
  4. eclipse插件本地扩展安装
  5. 香蕉派开源硬件 Banana PI
  6. boost:regex分割字符串(带有'\'字符) - zzusimon的专栏 - 博客频道 - CSDN.NET
  7. 同步电脑与手机,让手机变身无线Modem
  8. PHP memcached
  9. 刷题笔记(1) 一个序列是否为二叉搜索树的遍历结果
  10. 手机可用熵_时间之矢,生命之熵