<;msbuild>;带NAnt的任务或msbuild.exe?

<;msbuild>;带NAnt的任务或msbuild.exe?,msbuild,nant,nantcontrib,Msbuild,Nant,Nantcontrib,要让nant使用csproj文件,似乎有(至少)两个选项:使用的任务或直接使用msbuild.exe(例如)。我读对了吗?如果是的话,使用msbuild.exe比NAntContrib任务有什么好处?NAntContrib采用.NET Framework V2.0。如果要使用.NET 3.5,则需要直接调用MsBuild.exe。升级到.NET的新版本时,只需修改MSBuildPath属性 下面是一个例子: <property name="MSBuildPath" value="C:\WI

要让nant使用csproj文件,似乎有(至少)两个选项:使用的任务或直接使用msbuild.exe(例如)。我读对了吗?如果是的话,使用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

  • 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
属性用于没有空格字符的参数,而as
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>


哇,谢谢。我从没想过NAntContrib会落后这么多。-1您可以与.NET3.5一起使用。请确保您拥有最新的NAnt和NAntContrib(测试了NAnt Nightly 20090130和NAntContrib Nightly 20090201)。我是NAnt的新手,在处理msbuild时对arg line arg值的含义有点困惑。有人能给我解释一下区别吗,因为文档仍然没有为我澄清。“value”用于没有空格的参数“行”用于因空格而需要分隔的参数。否则,应用程序将使用该空格作为输入的结尾。@TheChairman-您当前的注释没有用处。如果您解释了如何选择与
相关联的msbuild版本,这将非常有用。该版本是一个移动目标,关于
3.5
的评论现在也提到了一个古董。作为NAnt的初学者,此答案有效,默认的
不起作用。