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. 似乎不好实现?

谢谢.

你可能感兴趣的:(Build)