【问题标题】:Building Visual Studio 2015 C++ project (v140) by MSBuild Failed - v140 cannot be foundMSBuild 构建 Visual Studio 2015 C++ 项目 (v140) 失败 - 找不到 v140
【发布时间】:2017-06-15 21:03:42
【问题描述】:

我并排安装了 Visual Studio 2013 和 2015。我刚刚将组合解决方案(C#、C++、C++/CLI)升级到 2015 并将 Platform Toolset 设置为 v140。

来自 Visual Studio 的构建工作正常,但无法从 MSBuild 编译。我用的是MSBuild 14,MSBuild抱怨找不到v140,但这是无稽之谈,因为v140安装在计算机上的“c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140”中。

关于升级解决方案的建议无法完成,因为解决方案已经升级并且解决方案上下文菜单中没有此项目。

如果我将项目的平台工具切换到 v120,它可以工作。

详情:

c:\git\hewerMaster>"c:\Program Files (x86)\MSBuild\14.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.

更新:

  • 有些项目从 Debug X86 中被跳过。这是故意的。
  • 该项目最初是在VS2008中创建的,然后升级到VS2013,然后升级到VS2015。
  • 这台计算机上安装了两个 Visual Studio(2013 Community 和 2015 Community)。先安装 2013,后安装 2015。

注册表设置如下所示:

更新 2: Minimal, Complete, and Verifiable example

我在 Visual Studio 2015 中创建了空的 C++ 控制台应用程序:

https://dl.dropboxusercontent.com/u/53387801/ConsoleApplication_v140.zip

#include "stdafx.h"

int main()
{
    return 0;
}

我可以在 Visual Studio 中构建它,但我在 MSBuild 中遇到了同样的问题:

c:\>"c:\Program Files (x86)\MSBuild\14.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:\>

已解决:

环境变量 VisualStudioVersion 设置为 12.0 而不是 14.0 将值更改为 14.0 解决了该问题。

在环境变量 VisualStudioVersion 更改和 windows 注销、登录后,简单的控制台应用程序立即开始工作。

更改环境变量 VisualStudioVersion 后仍无法构建原始项目。 Visual Studio 2015 中出现了重定向解决方案上下文菜单。所以我重新定位解决方案。重新定位后,仍然无法编译解决方案(未找到 v140)。最后,我将平台工具集从 v140(未安装) 更改为 Visual Studio 2015 (v140)。现在该解决方案也可以从 Visual Studio 和 MSBuild 编译。

【问题讨论】:

  • 很多人使用 v140 工具集构建了 C++ 项目。如果不可能,VS 2015 就不会发布。您的情况似乎很独特,我认为没有足够的信息供任何人解决。您可以尝试看看是否可以创建 MCVE。
  • 我已经测试了 MCVE 并且遇到了同样的问题。提供的 zip 文件链接。
  • 检查您没有定义环境变量VisualStudioVersion,或者您的解决方案和项目文件没有重新定义它而不是14.x.x.x

标签: c++ visual-studio-2015 msbuild-14.0


【解决方案1】:

您的问题是您将环境变量VisualStudioVersion 设置为12.0。这告诉 MSBuild 使用不支持 Visual Studio 2015 (V140) 构建工具的 Visual Studio 2013 (V120) 工具。如果您取消设置此环境变量,或将 /p:VisualStudioVersion=14.0 选项传递给 MSBuild,您的项目应该会构建。 (或者至少克服这个错误)。

您可以在标题为 Visual Studio project compatibility and VisualStudioVersion 的 MSDN 博客文章中找到有关 VisualStudioVersion 变量的更多信息。

【讨论】:

  • 顺便说一句,我没有自己设置变量VisualStudioVersion为12.0。这可能是VS2015安装的问题或其他问题。就这样发生了。 :-(
  • @qub1n VS 2015 安装不会将 VisualStudioVersion 环境变量设置为 12.0。将其设置为 12.0 的是运行 Visual Studio 2013 vcvars.bat 脚本之一。
【解决方案2】:

一种解决方案是您可以简单地更改系统中可用的平台工具集。然后它构建良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 2017-03-05
    • 2015-10-25
    • 2016-12-16
    • 2021-04-20
    • 2019-07-11
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多