我有一个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版本,但事实并非如此。知道是什么给出的吗?我知道我之前已经解决了这个问题,但不记得挽救我的生命是什么。
答案 0 :(得分:4)
我很欣赏答案,而且我知道skolima会起作用,解决方案最终就像添加这个标签一样简单:
<property name="nant.settings.currentframework" value="net-3.5"/>
再次感谢。
答案 1 :(得分:1)
旧版本的NAnt / NAntContrib默认为v2.0。
答案 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开箱即用的。