天天看點

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. 似乎不好實作?

謝謝.