大家可能已經知道.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. 似乎不好實作? 謝謝. |