通过 MSBuild 构建 Visual Studio 2015 C++ 项目 (v140) 失败 - 找不到 v140
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/32539801/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Building Visual Studio 2015 C++ project (v140) by MSBuild Failed - v140 cannot be found
提问by Tomas Kubes
I have Visual Studio 2013 and 2015 installed side by side. I have just upgraded the combined solution (C#, C++, C++/CLI) to 2015 and set Platform Toolset to v140.
我并排安装了 Visual Studio 2013 和 2015。我刚刚将组合解决方案(C#、C++、C++/CLI)升级到 2015 并将平台工具集设置为 v140。
The build from Visual Studio works fine, but it cannot be compiled from MSBuild. I use MSBuild 14 and MSBuild complains that is unable to find v140, but it is nonsense, because v140 is installed on the computer in "c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140".
Visual Studio 的构建工作正常,但不能从 MSBuild 编译。我使用 MSBuild 14,MSBuild 抱怨找不到 v140,但这是无稽之谈,因为 v140 安装在计算机上的“c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140”中。
The advice about upgrading the solution cannot be done, because the solution is already upgraded and there is no such item in solution context menu.
关于升级解决方案的建议无法执行,因为解决方案已经升级并且解决方案上下文菜单中没有这样的项目。
If I switch Platform tools of the project to v120, it works.
如果我将项目的平台工具切换到 v120,它就可以工作。
Details:
细节:
c:\git\hewerMaster>"c:\Program Files (x86)\MSBuild.0\Bin\MSBuild.exe" c:\git
\hewerMaster\Hewer.sln /property:Configuration=Debug /property:Platform=x86
Microsoft (R) Build Engine version 14.0.23107.0
Copyright (C) Microsoft Corporation. All rights reserved.
Building the projects in this solution one at a time. To enable parallel build,
please add the "/m" switch.
Build started 9/12/2015 4:00:25 PM.
Project "c:\git\hewerMaster\Hewer.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Debug|x86".
ValidateProjects:
The project "HewerDotNetWrapper" is not selected for building in solution con
figuration "Debug|x86".
The project "VisualHewer" is not selected for building in solution configurat
ion "Debug|x86".
The project "UnitTestWrapper" is not selected for building in solution config
uration "Debug|x86".
The project "ParamsFormatConverter" is not selected for building in solution
configuration "Debug|x86".
The project "UnitTestGenerator" is not selected for building in solution conf
iguration "Debug|x86".
The project "HewerUnitTestDotNet" is not selected for building in solution co
nfiguration "Debug|x86".
Project "c:\git\hewerMaster\Hewer.sln" (1) is building "c:\git\hewerMaster\Hewe
rRedirect\HewerRedirect.csproj" (2) on node 1 (default targets).
CoreCompile:
Skipping target "CoreCompile" because all output files are up-to-date with resp
ect to the input files.
_CopyAppConfigFile:
Skipping target "_CopyAppConfigFile" because all output files are up-to-date wi
th respect to the input files.
CopyFilesToOutputDirectory:
HewerRedirect -> c:\git\hewerMaster\anyCPU\Debug\pbrain-hewer.exe
Done Building Project "c:\git\hewerMaster\HewerRedirect\HewerRedirect.csproj" (
default targets).
Project "c:\git\hewerMaster\Hewer.sln" (1) is building "c:\git\hewerMaster\Hewe
r\Hewer.vcxproj" (3) on node 1 (default targets).
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.t
argets(64,5): error MSB8020: The build tools for v140 (Platform Toolset = 'v140
') cannot be found. To build using the v140 build tools, please install v140 bu
ild tools. Alternatively, you may upgrade to the current Visual Studio tools b
y selecting the Project menu or right-click the solution, and then selecting "U
pgrade Solution...". [c:\git\hewerMaster\Hewer\Hewer.vcxproj]
Done Building Project "c:\git\hewerMaster\Hewer\Hewer.vcxproj" (default targets
) -- FAILED.
Done Building Project "c:\git\hewerMaster\Hewer.sln" (default targets) -- FAILE
D.
Build FAILED.
UPDATE:
更新:
- There are some project being skipped form Debug X86. This is intentional.
- The project have been originally created in VS2008, then upgraded to VS2013, then upgraded to VS2015.
- There are two Visual Studios installed on this computer (2013 Community and 2015 Community). 2013 was installed first, 2015 later.
- 有一些项目从 Debug X86 中被跳过。这是故意的。
- 该项目最初是在VS2008中创建的,然后升级到VS2013,然后升级到VS2015。
- 这台计算机上安装了两个 Visual Studio(2013 社区和 2015 社区)。先安装 2013,再安装 2015。
The registry settings looks like:
UPDATE2:Minimal, Complete, and Verifiable example
UPDATE2:最小、完整和可验证的示例
I have created empty C++ Console Application in Visual Studio 2015:
我在 Visual Studio 2015 中创建了空的 C++ 控制台应用程序:
https://dl.dropboxusercontent.com/u/53387801/ConsoleApplication_v140.zip
https://dl.dropboxusercontent.com/u/53387801/ConsoleApplication_v140.zip
#include "stdafx.h"
int main()
{
return 0;
}
I can build it in Visual Studio, but I face the same issue in MSBuild:
我可以在 Visual Studio 中构建它,但在 MSBuild 中我面临同样的问题:
c:\>"c:\Program Files (x86)\MSBuild.0\Bin\MSBuild" "C:\temp\vs2015_simplest\C
onsoleApplication1\consoleApplication1.sln"
Microsoft (R) Build Engine version 14.0.23107.0
Copyright (C) Microsoft Corporation. All rights reserved.
Building the projects in this solution one at a time. To enable parallel build,
please add the "/m" switch.
Build started 9/16/2015 10:16:20 AM.
Project "C:\temp\vs2015_simplest\ConsoleApplication1\consoleApplication1.sln" o
n node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Debug|x64".
Project "C:\temp\vs2015_simplest\ConsoleApplication1\consoleApplication1.sln" (
1) is building "C:\temp\vs2015_simplest\ConsoleApplication1\ConsoleApplication1
\ConsoleApplication1.vcxproj" (2) on node 1 (default targets).
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.t
argets(64,5): error MSB8020: The build tools for v140 (Platform Toolset = 'v140
') cannot be found. To build using the v140 build tools, please install v140 bu
ild tools. Alternatively, you may upgrade to the current Visual Studio tools b
y selecting the Project menu or right-click the solution, and then selecting "U
pgrade Solution...". [C:\temp\vs2015_simplest\ConsoleApplication1\ConsoleApplic
ation1\ConsoleApplication1.vcxproj]
Done Building Project "C:\temp\vs2015_simplest\ConsoleApplication1\ConsoleAppli
cation1\ConsoleApplication1.vcxproj" (default targets) -- FAILED.
Done Building Project "C:\temp\vs2015_simplest\ConsoleApplication1\consoleAppli
cation1.sln" (default targets) -- FAILED.
Build FAILED.
"C:\temp\vs2015_simplest\ConsoleApplication1\consoleApplication1.sln" (default
target) (1) ->
"C:\temp\vs2015_simplest\ConsoleApplication1\ConsoleApplication1\ConsoleApplica
tion1.vcxproj" (default target) (2) ->
(PlatformPrepareForBuild target) ->
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform
.targets(64,5): error MSB8020: The build tools for v140 (Platform Toolset = 'v1
40') cannot be found. To build using the v140 build tools, please install v140
build tools. Alternatively, you may upgrade to the current Visual Studio tools
by selecting the Project menu or right-click the solution, and then selecting
"Upgrade Solution...". [C:\temp\vs2015_simplest\ConsoleApplication1\ConsoleAppl
ication1\ConsoleApplication1.vcxproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:00.14
c:\>
SOLVED:
解决了:
Environment variable VisualStudioVersion was set to 12.0 instead of 14.0Changing the value to 14.0 solved the issue.
环境变量 VisualStudioVersion 设置为 12.0 而不是 14.0将值更改为 14.0 解决了该问题。
The simple console application started to work immediately after the Environment variable VisualStudioVersion changed and after windows logout, login.
简单的控制台应用程序在环境变量 VisualStudioVersion 更改后立即开始工作,并在 Windows 注销后登录。
The original project still couldn't be build after changing environment variable VisualStudioVersion. A retarget solution context menu appeared in Visual Studio 2015. So I retarget the solution. After retargeting the solution still couldn't be compiled (v140 not found). Finally I changed the platform toolset from v140 (not installed)to Visual Studio 2015 (v140). Now the solution can be compiled from Visual Studio and MSBuild as well.
更改环境变量 VisualStudioVersion 后,仍然无法构建原始项目。Visual Studio 2015 中出现了重定向解决方案上下文菜单。所以我重定向了解决方案。重新定位后,解决方案仍然无法编译(未找到 v140)。最后,我将平台工具集从v140(未安装)更改为Visual Studio 2015 (v140)。现在,该解决方案也可以从 Visual Studio 和 MSBuild 编译。
回答by Ross Ridge
Your problem is that you set the environment variable VisualStudioVersion
to 12.0
. This tells MSBuild to use the Visual Studio 2013 (V120) tools, which don't support the Visual Studio 2015 (V140) build tools. If you unset this environment variable, or pass the /p:VisualStudioVersion=14.0
option to MSBuild your project, should build. (Or at least get past this error).
您的问题是您将环境变量设置VisualStudioVersion
为12.0
. 这告诉 MSBuild 使用不支持 Visual Studio 2015 (V140) 生成工具的 Visual Studio 2013 (V120) 工具。如果您取消设置此环境变量,或将/p:VisualStudioVersion=14.0
选项传递给 MSBuild 您的项目,则应构建。(或者至少克服这个错误)。
You can find more information about the VisualStudioVersion variable in a MSDN blog entry titled Visual Studio project compatibility and VisualStudioVersion.
您可以在名为Visual Studio 项目兼容性和 VisualStudioVersion的 MSDN 博客条目中找到有关 VisualStudioVersion 变量的更多信息。
回答by Abc
One solution is that you can simply change the platform toolset that is available in your system. Then it build fine.
一种解决方案是您可以简单地更改系统中可用的平台工具集。然后它构建良好。