Aufgabe oder msbuild.exe mit NAnt?
-
19-09-2019 - |
Frage
Es sieht aus wie es (mindestens) zwei Optionen für Nant zu verwenden csproj Dateien bekommen: mit der Aufgabe, NAntContrib oder mit msbuild.exe direkt (zB codecampserver ). Bin ich das richtig zu lesen, und wenn ja, was ist der Vorteil von msbuild.exe über die NAntContrib Aufgabe mit?
Lösung
Die NAntContrib geht davon aus .NET Framework V2.0. Wenn Sie .NET 3.5 verwenden möchten, müssen Sie MSBuild.exe direkt anrufen. Wie Sie auf neue Versionen von .NET aktualisieren, müssen Sie nur die MSBuildPath Eigenschaft ändern.
Hier ist ein Beispiel:
<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>
Der Wert MSBuildPath
für verschiedene Versionen von .NET sind
- 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
Für ein 32-Bit-Build, ändert Framework64
zu Framework
Aktualisieren
Im Anschluss an einige der Kommentare wird das value
Attribut für Parameter verwendet, der keine Leerzeichen haben. line
wird für die Parameter verwendet, die durch Leerzeichen getrennt werden müssen. Andernfalls würde die Anwendung den Raum als Ende der Eingabe verwendet werden.
Andere Tipps
Hier ist ein einfaches Ziel
<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>