<msbuild>任务还是用NAnt的msbuild.exe?

16

看起来至少有两种选项可以让nant使用csproj文件:使用NAntContrib的任务或直接使用msbuild.exe(例如codecampserver)。如果我理解得正确,那么使用msbuild.exe相比于NAntContrib任务有什么优势呢?

2个回答

27

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值如下:

  • 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

对于32位生成,将Framework64改为Framework

更新: 根据一些评论,value属性用于没有空格字符的参数,而line用于包含空格字符的参数。否则,NAnt会将空格视为输入结束符。


哇,谢谢。我从没想过NAntContrib落后这么多。 - keithm
7
您可以在 .NET 3.5 中使用 <msbuild>。请确保您拥有最新的 NAnt 和 NAntContrib(已测试 NAnt Nightly 20090130 和 NAntContrib Nightly 20090201)。 - The Chairman
我对NAnt还很陌生,对于在处理msbuild时的arg line和arg value的含义有些困惑。有人能否向我解释一下它们之间的区别,因为文档仍然没有澄清我的疑惑。 - sheir
“value”用于没有空格的参数。 “line”用于需要由于空格而被分隔的参数。否则,应用程序将使用空格作为输入结束符。 - Babak Naffas
2
@TheChairman - 您的评论并不实用。如果您能解释如何选择与<msbuild>相关联的版本,那将非常有用。版本是一个不断变化的目标,关于“3.5”的评论现在也指的是一件古董。作为NAnt的初学者,这个答案有效,而默认的<msbuild>则无法工作。 - P.Brian.Mackey

2
这里有一个简单的目标。
    <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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接