使用 NAnt 執行外部程式
NAnt 是一個可以幫助我們做自動建構的工具,透過NAnt不但可以自動建構,也可以做很多其他如複製檔案,整理檔案或建構多個版本等功能。基本上 NAnt 就是打內的 Ant。
NAnt 的 Script 是XML,內容是由許多的 Target 組成,如果沒有特別指定,預設是會去呼叫 Build 這個Target.
下面是 NAnt 的範例:
這個範例是使用 MSBuild.exe 去建構 TestApp 這個 solution.
一開始先宣告幾個變數供後面使用,分別是 _SLNPATH, _SLNNAME及MSBuild.VS2012
接著是預設的 target : Build, 其內容就是去呼叫 BuildAppSolutionAnyCPUDebug 和 BuildAppSolutionAnyCPURelease 這兩個 target. 而在這兩個 target 中都有 depend(相依) 到 PreBuildEvent, 這就表示在執行這兩個 target 時會先去呼叫 PreBuildEvent 這個 Target.
此外,在 Target 中用到的
echo message 代表會將 message 顯示在畫面上。
exec program 則是表示會執行外部程式。
arg value 指的就該外部指令要帶入那些參數。
最後一個 Target : AddPath_MyTools 裡用到的 setenv ,指的就是設定環境變數。
setenv name=”path” 代表要變更 path 這個環境變數
${environment::get-variable(‘PATH’)} : 代表取得目前環境變數中的 path 這個項目
分號後面當然就是加入我們想要的路徑囉!!
在這裡其實我提到的不多,只是一些很基本的觀念和語法而已,其實他擁有更多更強大的功能,可以上 http://nant.sourceforge.net/release/latest/help/ 去查看他
使用手冊,可以找到更多好用的功能。
NAnt 下載網址: http://nant.sourceforge.net/
1: <?xml version="1.0" encoding="utf-8"?>
2:
3: <project name="TestApp" default="Build" basedir=".">
4:
5: <!--
6: 也可以在這裡使用 include 其他的 NAnt scrip,
7: 可以將變數寫在同一個 script 內,將要執行部會變動的寫在另一個
8: script 內區分開來。 使用方式如下
9: <include buildfile="filename.build"/>
10: -->
11: <property name="_SLNPATH" value="." />
12: <property name="_SLNNAME" value="TestApp" />
13: <property name="_MSBuild.VS2012" value="C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" />
14:
15: <target name="Build">
16: <call target="BuildAppSolutionAnyCPUDebug"/>
17: <call target="BuildAppSolutionAnyCPURelease"/>
18: </target>
19:
20: <target name="BuildAppSolutionAnyCPUDebug" depends="PreBuildEvent">
21: <echo message="_SLNPATH: ${_SLNPATH}" />
22: <echo message="_SLNNAME: ${_SLNNAME}" />
23: <exec program="${_MSBuild.VS2012}">
24: <arg value="${_SLNPATH}\${_SLNNAME}.sln"/>
25: <arg value="/t:Rebuild" />
26: <arg value="/p:Configuration=Debug"/>
27: </exec>
28: </target>
29:
30: <target name="BuildAppSolutionAnyCPURelease" depends="PreBuildEvent">
31: <echo message="_SLNPATH: ${_SLNPATH}" />
32: <echo message="_SLNNAME: ${_SLNNAME}" />
33: <exec program="${_MSBuild.VS2012}">
34: <arg value="${_SLNPATH}\${_SLNNAME}.sln"/>
35: <arg value="/t:Rebuild" />
36: <arg value="/p:Configuration=Release"/>
37: </exec>
38: </target>
39:
40: <target name="PreBuildEvent">
41: <echo message="PreBuildEvent is called"/>
42: </target>
43:
44: <target name="AddPath_MyTools">
45: <setenv name="path" value="${environment::get-variable('PATH')};C:\MyTools;"/>
46: </target>
47: </project>
補充:
在 MSBuild.exe 的參數當中,/p:Configuration=Release 之後再加上 ;Platform=ARM 則代表要建置 Release ARM 版本