【发布时间】:2010-11-14 18:54:52
【问题描述】:
看起来(至少)有两个选项可以让 nant 使用 csproj 文件:使用 NAntContrib 的任务或直接使用 msbuild.exe(例如,codecampserver)。我读对了吗?如果是这样,使用 msbuild.exe 比 NAntContrib 任务有什么优势?
【问题讨论】:
标签: msbuild nant nantcontrib
看起来(至少)有两个选项可以让 nant 使用 csproj 文件:使用 NAntContrib 的任务或直接使用 msbuild.exe(例如,codecampserver)。我读对了吗?如果是这样,使用 msbuild.exe 比 NAntContrib 任务有什么优势?
【问题讨论】:
标签: msbuild nant nantcontrib
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>
不同版本.NET的MSBuildPath值是
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\MSBuild.exe
C:\Windows\Microsoft.NET\Framework64\v3.5\MSBuild.exe
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
对于 32 位版本,将 Framework64 更改为 Framework
更新
在某些 cmets 之后,value 属性用于没有空格字符的参数,而line 用于包含空格的参数。否则,NAnt 将使用空格作为输入的结尾。
【讨论】:
<msbuild> 关联的 msbuild 版本,将会很有用。版本是一个移动的目标,关于3.5 的评论现在也指的是古董。作为 NAnt 的初学者,此答案有效,默认的 <msbuild> 无效。
这是一个简单的目标
<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>
【讨论】: