使用Nant构建入门
前言:
NAnt是一項(xiàng)開源的項(xiàng)目,利用NAnt,你可以方便快捷地對(duì)自己.NET項(xiàng)目或解決方案進(jìn)行自動(dòng)構(gòu)建。與VS中可視化化極強(qiáng)的項(xiàng)目和解決方案管理相比,NAnt只能命令行的方式操作,但是這并不影響Nant的流行。NAnt可以根據(jù)我們的需要,幫我們自動(dòng)構(gòu)建項(xiàng)目,比如創(chuàng)建文件夾,移動(dòng)文件,運(yùn)行指定的程序等等,這些都是VS無法辦到的。
1U+jM xz^b:NP0范例代碼:/Files/gpcuster/NAntDemo.rar
:@ A-wu!x0
正文:
如果你的機(jī)器上沒有安裝NAnt,請(qǐng)先到http://nant.sourceforge.net下載,并安裝到機(jī)器上。
由于NAnt是基于命令行的工具,所以,我們第一步需要配置環(huán)境變量:在環(huán)境變量設(shè)置窗口中找到Path目錄,將Nant.exe所在的目錄(如C:"Program Files"nant-0.85"bin)添加進(jìn)去即可。
如果你對(duì)配置環(huán)境變量不熟悉,也可以在系統(tǒng)目錄(如C:"Windows)下添加一個(gè)nant.bat文件,
nant.bat文件的內(nèi)容如下:
@echo off
`5P&cy,x
q0"C:\Program Files\nant-0.85\bin\NAnt.exe" %*
然后,你打開CMD窗口,輸入nant后可以看到:
然后,我們?cè)贒盤的根目錄下新建一個(gè)NAnt的構(gòu)建文件,命名為my.build(NAnt的構(gòu)建文件的后綴名是build)
雖然NAnt構(gòu)建文件的后綴名不是XML,但是他的文檔格式還是基于XML的,所以改文件的開頭需要注明<?xmlversion="1.0"?>。在下面我們?cè)偌尤肫渌脑兀麄€(gè)文件的內(nèi)容如下:
<?xmlversion="1.0"?>
<projectname="Aaron.Guo.NAnt.Project"default="show"basedir=".">
<targetname="show">
<echomessage="Hello NAnt"/>
</target>
</project>
保存以后,我們?cè)贑MD窗口中來運(yùn)行這個(gè)構(gòu)建文件,如下圖所示:
我們用-buildfile:來指定需要構(gòu)建的文件的地址(D:"my.build)。可以看到,這個(gè)文件就是顯示了一個(gè)字符串:Hello NAnt。
下面,我們來看看這個(gè)文件中的3個(gè)重要標(biāo)志:
1. project表示構(gòu)建文件的項(xiàng)目,每個(gè)構(gòu)建文件有且盡有一個(gè)項(xiàng)目,他包括一系列的target,name="Aaron.Guo.NAnt.Project"說明項(xiàng)目名稱是Aaron.Guo.NAnt.Project,這是可選的default="show "表示項(xiàng)目的默認(rèn)目的(target)是show,basedir="."表示基準(zhǔn)目錄為當(dāng)前目錄。
2. target表示一個(gè)目的,他包括一系列的task,name="show"指定目的的名稱,這個(gè)是必選的。
3. echo是一個(gè)任務(wù)(task)他用來顯示一個(gè)特定的字符串,message="Hello NAnt"表示要顯示的字符串為Hello NAnt。
下面,我們用這個(gè)構(gòu)建文件來編譯生成一個(gè)簡單的CS文件。
對(duì)my.build文件修改后的內(nèi)容如下:
<?xmlversion="1.0"?>
<projectname="Aaron.Guo.Second.Project"default="show"basedir=".">
<propertyname="basename"value="HelloNAnt"/>
<propertyname="debug"value="true"/>
<!--顯示消息-->
<targetname="show">
<echomessage="Hello NAnt"/>
</target>
<!--編譯文件-->
<targetname="build">
<mkdirdir="${basename}/bin"/>
<csctarget="exe"output="${basename}/bin/${basename}-cs.exe"debug="${debug}">
<sources>
<includename="${basename}/${basename}.cs"/>
</sources>
</csc>
</target>
<!--運(yùn)行文件,run基于build-->
<targetname="run"depends="build">
<execprogram="${basename}/bin/${basename}-cs.exe"basedir="."/>
</target>
</project>
然后D盤根目錄下新建一個(gè)HelloNant文件夾,并在里面添加一個(gè)HelloNant.cs文件,該文件的內(nèi)容如下:
namespaceAaron.Guo.Second.Project
{
publicclassHelloNAntCS
{
staticvoidMain()
{
System.Console.WriteLine("Hello NAnt using C#");
}
}
}
好,我們?cè)贑MD窗口中運(yùn)行nant
–buildfile:D:"my.build
可以看見,顯示的東西還是和上次一樣,而且CS文件也沒有被編譯也沒有被運(yùn)行。
原因是這個(gè)項(xiàng)目默認(rèn)的target是show,所以編譯和運(yùn)行的target都沒有執(zhí)行。因此,我們需要顯示的指定相應(yīng)執(zhí)行的target。
下面,為了執(zhí)行build,我們輸入nant –buildfile:D:"my.build
build 執(zhí)行的輸出如下圖所示:
并且我們可以在D:\HelloNAnt\bin中找到生成的可執(zhí)行文件HelloNAnt-cs.exe
然后,我們?cè)賮磔斎雗ant –buildfile:D:\my.build run結(jié)果如下:
如果我們希望先顯示消息,在運(yùn)行程序,可以執(zhí)行一下的命令:nant –buildfile:D:\my.build show run 結(jié)果如下:
現(xiàn)在,相信大家已經(jīng)對(duì)NAnt的使用有了一定的了解了。
后記:
相信在不久的將來,NAnt也會(huì)擁有漂亮方便的圖形界面操作方式,功能也將越來越完善。
nant
nant不像目前版本的visual studio .net,他是個(gè)基于.net的編譯(build)工具,能夠使項(xiàng)目的編譯過程非常容易。當(dāng)項(xiàng)目研發(fā)者非常多時(shí),不可能依靠某個(gè)人去執(zhí)行編譯過程,你也不想經(jīng)常去手工編譯項(xiàng)目,而是代之以創(chuàng)建一個(gè)每天晚上自動(dòng)運(yùn)行的編譯過程。nant允許你執(zhí)行編譯解決方案、復(fù)制文件、運(yùn)行nunit測試、發(fā)送e-mail等工作。遺憾的是,nant沒有漂亮的圖像化界面,但他包括一個(gè)控制臺(tái)應(yīng)用程式和xml文件,xml文件指定了編譯過程中應(yīng)當(dāng)完成的任務(wù)。注意visual
studio 2005新的編譯平臺(tái)msbuild,他提供非常穩(wěn)健的編譯功能并且同樣是由基于xml的項(xiàng)目文件驅(qū)動(dòng)的。
使用nant
在這個(gè)例子中,我將為前面創(chuàng)建的nunitexample解決方案創(chuàng)建一個(gè)nant編譯文件。首先創(chuàng)建一個(gè)以.build 為擴(kuò)展名的xml文件,將他置于項(xiàng)目的根目錄下,然后在文件頂部添加一個(gè)xml聲明。第一個(gè)添加的標(biāo)記是項(xiàng)目標(biāo)記:
the nunit example project
項(xiàng)目標(biāo)記設(shè)置了項(xiàng)目名稱、缺省目標(biāo)和基目錄。描述標(biāo)記設(shè)置了該項(xiàng)目的簡要描述。
接下來是添加屬性標(biāo)記,用于存儲(chǔ)可從文件所有地方訪問的設(shè)置值。在本例中,我要?jiǎng)?chuàng)建一個(gè)名為debug的屬性,他能設(shè)置為true或false,用于決定項(xiàng)目是否在調(diào)試時(shí)被編譯(這個(gè)特別的屬性最后實(shí)際上不影響項(xiàng)目的編譯,他是你設(shè)置的一個(gè)簡單變量,能在實(shí)際決定怎么編譯項(xiàng)目后讀取。)屬性標(biāo)記如下:
然后,創(chuàng)建一個(gè)目標(biāo)標(biāo)記。一個(gè)項(xiàng)目能包含多個(gè)標(biāo)記,他們?cè)趎ant運(yùn)行時(shí)指定。如果沒有指定目標(biāo),則使用項(xiàng)目元素中缺省的設(shè)置值。在本例中,缺省目標(biāo)是“build”。讓我們看一看目標(biāo)元素,他包含大部分編譯信息:
在目標(biāo)元素中,我設(shè)置了要編譯的目標(biāo)名并創(chuàng)建一個(gè)任務(wù)描述。下面還要?jiǎng)?chuàng)建一個(gè)csc元素,他指定應(yīng)當(dāng)傳遞給c#編譯器csc的內(nèi)容。讓我們看一看csc元素:
debug="${debug}">
首先,必須設(shè)置csc元素的目標(biāo)。在本例中我將創(chuàng)建一個(gè).dll文件,因此我將目標(biāo)設(shè)置為“l(fā)ibrary”。接下來設(shè)置csc元素的輸出,他指定.dll文件的創(chuàng)建位置。最后,需要設(shè)置debug屬性,他決定項(xiàng)目是否在調(diào)試時(shí)被編譯。因?yàn)榍懊嬉褎?chuàng)建了一個(gè)屬性來存儲(chǔ)這個(gè)值,所以能使用下列字符串來訪問該屬性的值:${debug}。csc元素還包含一些子元素,這里需要?jiǎng)?chuàng)建兩個(gè)元素:引用元素告知nant需要為這個(gè)項(xiàng)目引用的程式集,源文件元素告訴nant編譯所包括的文件。在本例中,我引用nunit.framework.dll程式集并包括hashtabletest.cs文件。最終的編譯文件見圖8。(正常情況下你還應(yīng)當(dāng)創(chuàng)建一個(gè)用于刪除生成的文件的clean目標(biāo),但我為了文章簡短而省略了。)
圖8 nant編譯文件
要編譯這個(gè)文件,需要在.build文件所在的項(xiàng)目根目錄下執(zhí)行nant.exe。如果編譯成功,應(yīng)用程式的bin目錄下能找到.dll和.pdb文件。盡管使用nant確實(shí)不如在visual
studio中點(diǎn)擊“build”那么容易,但對(duì)于研發(fā)按進(jìn)度自動(dòng)運(yùn)行的編譯過程,他是個(gè)功能非常強(qiáng)大的工具。nant還包括一些有用的功能,例如,運(yùn)行單元測試或復(fù)制其他文件(目前的visual studio編譯過程不支持這些功能)。
該文章經(jīng)過本人整理所得,歡迎轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)加上本文地址;本文基于署名 2.5 中國大陸許可協(xié)議發(fā)布,請(qǐng)勿演繹或用于商業(yè)目的,但是必須保留本文的署名張志濤(包含鏈接如您有任何疑問或者授權(quán)方面的協(xié)商,請(qǐng)給我留言。
總結(jié)
以上是生活随笔為你收集整理的使用Nant构建入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三菱翼神加装涡轮增压能备案吗
- 下一篇: 一减二十分之八十七等于多少?