【问题标题】:<msbuild> task or msbuild.exe with NAnt?<msbuild> 任务或带有 NAnt 的 msbuild.exe?
【发布时间】:2010-11-14 18:54:52
【问题描述】:

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

【问题讨论】:

    标签: msbuild nant nantcontrib


    【解决方案1】:

    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.5C:\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

    更新 在某些 cmets 之后,value 属性用于没有空格字符的参数,而line 用于包含空格的参数。否则,NAnt 将使用空格作为输入的结尾。

    【讨论】:

    • 哇,谢谢。没想到 NAntContrib 落后这么远。
    • -1 您可以将 与 .NET 3.5 一起使用。确保您拥有 NAnt 和 NAntContrib 的最新 nightlies(已测试 NAnt Nightly 20090130 和 NAntContrib Nightly 20090201)。
    • 我是 NAnt 的新手,在处理 msbuild 时对 arg 行 arg 值的含义有些困惑。有人可以向我解释一下差异,因为文档仍然没有为我解决问题。
    • 'value' 用于没有空格的参数。 'line' 用于因空格而需要分隔的参数。否则,应用程序将使用空格作为输入的结尾。
    • @TheChairman - 您的评论没有用。如果您解释了如何选择与&lt;msbuild&gt; 关联的 msbuild 版本,将会很有用。版本是一个移动的目标,关于3.5 的评论现在也指的是古董。作为 NAnt 的初学者,此答案有效,默认的 &lt;msbuild&gt; 无效。
    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-12
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多