Задача<msbuild> или msbuild.exe с NAnt?
Похоже, что есть (по крайней мере) два варианта получения nant для использования файлов csproj: с помощью задачи NAntContrib или напрямую с помощью msbuild.exe (например, codecampserver). Я правильно понял, и если да, то в чем преимущество использования msbuild.exe над задачей NAntContrib?
2 ответа
NAntContrib предполагает.NET Framework V2.0. Если вы хотите использовать.NET 3.5, вам нужно вызвать MsBuild.exe напрямую. При обновлении до новых версий.NET вам нужно только изменить свойство MSBuildPath.
Вот пример:
<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>
Значение MSBuildPath
для разных версий.NET есть
- 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.х, 4.6.х, 4.7.х
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
Для 32-битной сборки измените Framework64
в Framework
Обновление После некоторых комментариев value
Атрибут используется для параметров без пробелов. line
используется для параметров, которые должны быть разделены из-за пробелов. В противном случае приложение будет использовать пробел в качестве конца ввода.
Вот простая цель
<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>