tâche ou msbuild.exe avec NAnt?

il semble qu'il y ait (au moins) deux options pour obtenir nant d'utiliser des fichiers csproj: en utilisant la tâche de NAntContrib ou en utilisant msbuild.exe directement (par exemple, codecampserver ). Est-ce que je lis bien, et si oui, quel est l'avantage d'utiliser msbuild?exe sur la tâche NAntContrib?

15
demandé sur keithm 2009-07-28 20:57:35

2 réponses

the NAntContrib assume .net Framework V2.0. Si vous voulez utiliser .NET 3.5, vous devez appeler MsBuild.exe directement. Lorsque vous mettez à niveau vers les nouvelles versions de .NET, vous n'avez qu'à modifier la propriété MSBuild Path.

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 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 construction à 32 bits, remplacer Framework64 par Framework

mise à Jour Suite à certains commentaires, le value attribut est utilisé pour les paramètres qui n'ont pas d'espaces. line est utilisé pour les paramètres qui doivent être délimités en raison des espaces. Sinon, l'application utilise l'espace comme une fin de l'entrée.

25
répondu Babak Naffas 2018-07-23 10:14:13

Voici une cible simple

    <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>
2
répondu dekdev 2012-07-12 14:12:15