16

看起来(至少)有两个选项可以让 nant 使用 csproj 文件:使用NAntContrib的任务或直接使用 msbuild.exe(例如codecampserver)。我读对了吗,如果是这样,使用 msbuild.exe 比 NAntContrib 任务有什么优势?

4

2 回答 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.0C:\Windows\Microsoft.NET\Framework64\v2.0.50727\MSBuild.exe
  • 3.5C:\Windows\Microsoft.NET\Framework64\v3.5\MSBuild.exe
  • 4、4.5.x、4.6.x、4.7.xC:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe

对于 32 位版本,更改Framework64Framework

更新 跟进一些评论,该value属性用于没有空格字符line的参数,而 as 用于包含空格的参数。否则,NAnt 将使用该空间作为输入的结尾。

于 2009-07-29T18:23:21.847 回答
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>
于 2012-07-12T14:12:15.633 回答