tâche ou msbuild.exe avec NAnt?
-
19-09-2019 - |
Question
On dirait qu'il ya (au moins) deux options pour obtenir Nant d'utiliser csproj fichiers: en utilisant la tâche de NAntContrib ou en utilisant msbuild.exe directement (par exemple, codecampserver ). Suis-je en train de lire ce droit, et si oui, quel est l'avantage d'utiliser msbuild.exe sur la tâche NAntContrib?
La solution
Le NAntContrib assume .NET Framework V2.0. Si vous voulez utiliser .NET 3.5, vous devez appeler directement MSBuild.exe. Comme vous mettez à niveau vers les nouvelles versions de .NET, vous devez modifier uniquement la propriété MSBuildPath.
Voici un exemple:
<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>
La valeur MSBuildPath
pour les différentes versions de .NET sont
- 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
Pour une version 32 bits, le changement Framework64
à Framework
Mise à jour
Faisant suite à certains commentaires, l'attribut value
est utilisé pour les paramètres qui ne disposent pas d'espaces. line
est utilisé pour les paramètres qui doivent être délimités en raison des espaces. Dans le cas contraire, l'application utiliserait l'espace comme une fin de l'entrée.
Autres conseils
Voici une simple cible
<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>