如何在nant脚本中指定MSBuild版本?

时间:2013-02-27 15:45:51

标签: msbuild nant msbuild-4.0

我有一个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版本,但事实并非如此。知道是什么给出的吗?我知道我之前已经解决了这个问题,但不记得挽救我的生命是什么。

4 个答案:

答案 0 :(得分:4)

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

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

再次感谢。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

基本上,如果您设置一个指向MSBuild可执行文件的属性,那么当您升级到.NET的新版本时,可以避免(长期)问题,而不是NAnt开箱即用的。