Задача <msbuild> или msbuild.exe с NAnt?
-
19-09-2019 - |
Вопрос
Похоже, есть (по крайней мере) два варианта заставить Nant использовать файлы csproj:используя задачу NAntContrib или напрямую используя msbuild.exe (например, кодкемпсервер).Правильно ли я понимаю, и если да, то в чем преимущество использования msbuild.exe перед задачей NAntContrib?
Решение
NAntContrib предполагает наличие .NET Framework версии 2.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>