【问题标题】:How to specify MSBuild version in nant script?如何在 nant 脚本中指定 MSBuild 版本?
【发布时间】:2013-02-27 15:45:50
【问题描述】:

我有一个 nant 脚本,它在其中一个目标中使用 msbuild 标记来构建 Visual Studio 2010 解决方案。

问题是到了这个点就失败了,错误是:

Solution file error MSB5014: File format version is not recognized.  MSBuild can only read solution files between versions 7.0 and 9.0, inclusive.

Failed to start MSBuild.

External Program Failed:  C:\Windows\Microsoft.NET\Framework\v2.0.50727\msbuild.exe (return code was 1)

这个错误是有道理的,如果它调用 .NET 2.0 版本的 MSBuild,它不会编译 VS2010 解决方案。但是,我不知道如何让它调用正确版本的 MSBuild。

如果我运行 'where MSBuild'(来自构建脚本失败的同一个 VS2010 命令提示符),我会得到:

 C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
 C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe

如果我运行“msbuild /version”(同样是同一窗口),我会得到:

 Microsoft (R) Build Engine version 4.0.30319.17929
 [Microsoft .NET Framework, version 4.0.30319.18034]
 Copyright (C) Microsoft Corporation. All rights reserved.

 4.0.30319.17929

所以一切看起来都应该使用 4.0 版本,但事实并非如此。知道什么给出了吗?我知道我以前解决过这个问题,但不记得是什么拯救了我的生命。

【问题讨论】:

    标签: msbuild nant msbuild-4.0


    【解决方案1】:

    我很欣赏这些答案,我知道 skolima 会起作用,解决方案最终就像添加这个标签一样简单:

        <property name="nant.settings.currentframework" value="net-3.5"/> 
    

    再次感谢。

    【讨论】:

      【解决方案2】:

      旧版本的 NAnt/NAntContrib 默认为 v2.0。

      听起来像:Nant msbuild task with .net 4.0 rc

      【讨论】:

        【解决方案3】:

        我通常使用的是使用-t:net-4.0 开关(或任何其他框架版本)执行NAnt,并在我的脚本中使用&lt;exec program="${framework::get-tool-path('msbuild.exe')}" managed="strict" /&gt; 来实际调用msbuild。是的,这不使用内置的&lt;msbuild/&gt; 任务,但更具弹性。

        【讨论】:

          【解决方案4】:

          我回答了一个类似的问题:<msbuild> task or msbuild.exe with NAnt? 不久前

          基本上,如果您设置一个指向 MSBuild 可执行文件的属性,则可以在升级到比 NAnt 开箱即用支持的更新的 .NET 时避免(长期)问题。

          【讨论】:

            猜你喜欢
            • 2012-06-20
            • 2018-12-16
            • 1970-01-01
            • 2011-12-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-06
            • 1970-01-01
            相关资源
            最近更新 更多