2009-07-28 69 views

回答

23

NAntContrib假定.NET Framework V2.0。如果你想使用.NET 3.5,你需要直接調用MsBuild.exe。在升級到新版本的.NET時,只需修改MSBuildPath屬性。

下面是一個例子:

<property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe"/>  
<target name="build"> 
    <exec program="${MSBuildPath}"> 
     <arg line='"${SolutionFile}"' /> 
     <arg line="/property:Configuration=${SolutionConfiguration}" /> 
     <arg value="/target:Rebuild" /> 
     <arg value="/verbosity:normal" /> 
     <arg value="/nologo" /> 
     <arg line='/logger:"C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll"'/> 
    </exec> 
</target> 

不同版本.NET的值MSBuildPath

  • 2.0,3.0 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\MSBuild.exe
  • 3.5 C:\Windows\Microsoft.NET\Framework64\v3.5\MSBuild.exe
  • 4,4.5 4.5.1 ,4.5.2 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe

對於一個32位的構建,改變Framework64Framework

更新 上的一些評論跟進,在value屬性被用於那些沒有空格的參數。 line用於需要由於空格而被分隔的參數。否則,應用程序將使用該空間作爲輸入的結尾。

+0

哇,謝謝。我從來沒有想到NAntContrib遠遠落後。 – keithm 2009-07-30 11:37:58

2

下面是一個簡單的目標

<target> 

    <loadtasks assembly="${nant::get-base-directory()}/../../nantcontrib-0.85/bin/NAnt.Contrib.Tasks.dll" /> 

    <msbuild project="${filepath.root}/yourproject.csproj" verbose="true">  
      <arg value="/p:Platform=${build.platform}" /> 
      <arg value="/t:Rebuild" /> 
      <arg value="/p:OutputPath=${build.dir}/bin/" /> 
     </msbuild> 

</target>