tarea o msbuild.exe con Nant?
-
19-09-2019 - |
Pregunta
Parece que hay (al menos) dos opciones para conseguir Nant utilizar csproj archivos: mediante la tarea de NAntContrib o usando msbuild.exe directamente (por ejemplo, CodeCampServer ). Estoy leyendo este derecho, y si es así, ¿cuál es la ventaja de utilizar msbuild.exe cargo de la tarea NAntContrib?
Solución
El NAntContrib asume .NET Framework v2.0. Si desea utilizar .NET 3.5, tendrá que llamar directamente MSBuild.exe. Como actualizar a nuevas versiones de .NET, sólo es necesario modificar la propiedad MSBuildPath.
Este es un ejemplo:
<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>
El valor MSBuildPath
para diferentes versiones de .NET son
- 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
Para una acumulación de 32 bits, el cambio Framework64
a Framework
Actualizar
El seguimiento de algunos de los comentarios, el atributo value
se utiliza para los parámetros que no tienen espacios. line
se utiliza para los parámetros que deben ser delimitados debido a los espacios. De lo contrario, la aplicación sería utilizar el espacio como un final de la entrada.
Otros consejos
Este es un objetivo sencillo
<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>