看完上一篇,你大概會想,要寫的 task 是如此之少,這真是太完美了。
但是對於笨Q來說,不幸的事情發生了…
笨Q 聽說 .Net 也移植到 Linux 上了,所以他想試試看把上篇的程式拿到 Linux 下編譯,於是笨 Q 安裝了 Mono。接著安裝 NAnt。
同樣他下載了 NAnt, 並且解開,放到 /opt/nant 下。
再把整個專案複製到 Linux 下,並且修改了一下 build 檔的內容,由
<property name=”nant.settings.currentframework” value=”net-1.1″/>
改為
<property name=”nant.settings.currentframework” value=”mono-1.0″/>
讓 NAnt 在建立專案前自動把編譯環境切換為 mono。
接著輸入
$mono /opt/nant/bin/NAnt.exe
這時只見 NAnt 很不爭氣的吐了一句:
Invalid element <solution>. Unknown task or datatype
笨Q 只能流淚默默接受這個事實,他知道必須自己學著寫 target。
一個 NAnt 的 build 檔案其實是一個 XML 檔案,最基本的元素是 project,project 則是由 target 與 property 組成的,而 target 則是由許多的 task 組成的。
所以一個空的 build 檔案是長這個樣子:
<?xml version="1.0"?>
<project name="dnsedu" default=“build”>
<property name=“nant.settings.currentframework” value=“net-1.1″/>
<target name=“build” description="Default build target" depends="dnsedu">
</target>
</project>
那麼 target 裡面有哪些 task 可以用呢?你可以參考官方網站的這裡。
裡面真的很多 task,除了基本編譯(csc, vbc, cl, al, ilasm, resgen)之外,他還有 copy, cvs, mail, nunit …等等的 task,絕對可以讓你組合出你想要的東西。
要改寫上篇的 build(我假設你用 c#),我們會用到 csc、mkdir 這兩個主要的 task。
以下是改寫好的 build 檔案
<project name="your_project" default="build">
<property name="nant.settings.currentframework" value="mono-1.0"/>
<property name="debug" value="false"/>
<target name="build">
<mkdir dir="bin" unless="${directory::exists(‘bin’)}" />
<csc target="winexe" output="bin/your_project.exe" debug="${debug}">
<sources>
<include name="*.cs"/>
</sources>
<references>
<include name="System.Drawing.dll" />
<include name="System.Data.dll" />
<include name="System.Windows.Forms.dll"/>
</references>
<resources>
<include name="*.resx"/>
</resources>
</csc>
</target>
</project>
mkdir task 這邊我使用了 unless,意思是 if not,所以意思就是當目錄不存在的時候,就建立一個。這裡判斷目錄是否存在的函數是 NAnt 內建的,想知道有哪些函數可用,可以參考NAnt官方網站的這邊。
csc task 裡面,則需要指定輸出類型(target),輸出檔名(output)以及要不要包含除錯資訊(debug)。
夾在 <csc></csc> 裡面的,就是指定你 c# 程式,所引用(或參考)到的組件以及所使用的資源檔。
很簡單,對吧~
這就是最基本的囉,下次我們來談談 web 應用程式的部份。