tarefa ou MSBuild.exe com NAnt?
-
19-09-2019 - |
Pergunta
Parece que existem (pelo menos) duas opções para obter nant para arquivos csproj uso: usando a tarefa de NAntContrib ou usando MSBuild.exe directamente (por exemplo, CodeCampServer ). Estou lendo esse direito, em caso afirmativo, qual é a vantagem de usar MSBuild.exe sobre a tarefa NAntContrib?
Solução
O NAntContrib assume .NET Framework V2.0. Se você quiser usar o .NET 3.5, você precisa chamar MSBuild.exe diretamente. Como você atualizar para as novas versões do .NET, você só precisa modificar a propriedade MSBuildPath.
Aqui está um exemplo:
<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>
O valor MSBuildPath
para diferentes versões do .NET são
- 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 uma compilação de 32 bits, mudança Framework64
para Framework
Atualizar
Dando seguimento a alguns dos comentários, o atributo value
é usado para parâmetros que não têm espaços. line
é usado para parâmetros que precisam ser delimitados devido a espaços. Caso contrário, o aplicativo deve usar o espaço como um fim de entrada.
Outras dicas
Aqui é um alvo simples
<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>