使用 NAnt 執行外部程式

  • 1831
  • 0

使用 NAnt 執行外部程式

NAnt 是一個可以幫助我們做自動建構的工具,透過NAnt不但可以自動建構,也可以做很多其他如複製檔案,整理檔案或建構多個版本等功能。基本上 NAnt 就是打內的 Ant。

 

NAnt 的 Script 是XML,內容是由許多的 Target 組成,如果沒有特別指定,預設是會去呼叫 Build 這個Target.

 

下面是 NAnt 的範例:

這個範例是使用 MSBuild.exe 去建構 TestApp 這個 solution.

一開始先宣告幾個變數供後面使用,分別是 _SLNPATH, _SLNNAMEMSBuild.VS2012

接著是預設的 target : Build, 其內容就是去呼叫 BuildAppSolutionAnyCPUDebugBuildAppSolutionAnyCPURelease 這兩個 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 版本