看起来至少有两种选项可以让nant使用csproj文件:使用NAntContrib的任务或直接使用msbuild.exe(例如codecampserver)。如果我理解得正确,那么使用msbuild.exe相比于NAntContrib任务有什么优势呢?
看起来至少有两种选项可以让nant使用csproj文件:使用NAntContrib的任务或直接使用msbuild.exe(例如codecampserver)。如果我理解得正确,那么使用msbuild.exe相比于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
。
更新:
根据一些评论,value
属性用于没有空格字符的参数,而line
用于包含空格字符的参数。否则,NAnt会将空格视为输入结束符。
<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>
<msbuild>
相关联的版本,那将非常有用。版本是一个不断变化的目标,关于“3.5”的评论现在也指的是一件古董。作为NAnt的初学者,这个答案有效,而默认的<msbuild>
则无法工作。 - P.Brian.Mackey