5

我有一个 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

4 回答 4

4

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

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

再次感谢。

于 2013-02-28T15:42:17.017 回答
1

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

听起来像:.net 4.0 rc 的 Nant msbuild 任务

于 2013-02-27T22:51:41.840 回答
1

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

于 2013-02-27T23:17:30.330 回答
0

我回答了一个类似的问题:<msbuild> task or msbuild.exe with NAnt? 一会儿回来

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

于 2013-02-28T17:58:33.823 回答