compito o msbuild.exe con NAnt?
-
19-09-2019 - |
Domanda
Sembra che non ci sono (almeno) due opzioni per ottenere Nant utilizzare csproj file: usando il compito di NAntContrib o utilizzando msbuild.exe direttamente (ad esempio, codecampserver ). Sto leggendo questo diritto, e se sì, qual è il vantaggio di utilizzare MSBuild.exe il compito NAntContrib?
Soluzione
Il NAntContrib assume .NET Framework V2.0. Se si desidera utilizzare .NET 3.5, è necessario chiamare direttamente MSBuild.exe. Come si esegue l'aggiornamento a nuove versioni di .NET, è necessario modificare solo la proprietà MSBuildPath.
Ecco un esempio:
<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>
Il MSBuildPath
valore per le diverse versioni di .NET sono
- 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.x, 4.6.x, 4.7.x
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
Per un 32 bit di compilazione, il cambiamento Framework64
a Framework
Aggiorna
Facendo seguito a alcuni dei commenti, l'attributo value
viene utilizzato per i parametri che non hanno spazi. line
viene utilizzata per i parametri che devono essere delimitate causa di spazi. In caso contrario, l'applicazione utilizzare lo spazio come un'estremità di ingresso.
Altri suggerimenti
Ecco una semplice destinazione
<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>