Msbuild没有为Visual C ++项目使用指定的工具集

时间:2017-03-23 11:55:33

标签: visual-studio visual-c++ visual-studio-2013 msbuild

我有一台安装了并排VS2015和VS2013的机器,我正在尝试使用VS2013工具集(v120)构建一些东西。但是,尽管项目文件中有明确的覆盖,但它正在尝试使用v140。

C:\transfer\MathLib\testSse>msbuild Sse.vcxproj
Microsoft (R) Build Engine version 12.0.40629.0
[Microsoft .NET Framework, version 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 23-Mar-17 12:35:07.
Project "C:\transfer\MathLib\testSse\Sse.vcxproj" on node 1 (default targets).
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB8020: The build t
ools for v140 (Platform Toolset = 'v140') cannot be found. To build using the v140 build tools, please install v140 bui
ld tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-cli
ck the solution, and then selecting "Upgrade Solution...". [C:\transfer\MathLib\testSse\Sse.vcxproj]
Done Building Project "C:\transfer\MathLib\testSse\Sse.vcxproj" (default targets) -- FAILED.


Build FAILED.

"C:\transfer\MathLib\testSse\Sse.vcxproj" (default target) (1) ->
(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 = 'v140') cannot be found. To build using the v140 build tools, please install v140 b
uild tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-c
lick the solution, and then selecting "Upgrade Solution...". [C:\transfer\MathLib\testSse\Sse.vcxpro
j]

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.16

C:\transfer\MathLib\testSse>notepad Sse.vcxproj

以下是项目文件的相关摘录:

  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Label="Configuration" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>

我可以使用以下命令覆盖它:

msbuild Sse.vcxproj /p:PlatformTooset=v120

然后它编译,但这并没有真正解决问题,因为我在大型Visual Studio解决方案中有很多这些,我需要所有这些都使用该参数。除非我能以某种方式将msbuild覆盖参数放在解决方案中。

但是,是什么导致msbuild使用我未在任何地方提及的其他工具集?

一种可能性是我在VS2013之后安装了VS2015 - 我认为这有点不寻常。这可能是问题吗?

1 个答案:

答案 0 :(得分:1)

如果您使用Visual Studio 2015创建项目并使用VS2013工具集(v120)构建它。您需要在Property Pages上将Platform Toolset更改为 Visual Studio 2013(v120)

使用MSBuild命令构建项目时,我们需要在.vcxproj文件中将PlatformToolset更改为V120。 <PlatformToolset>v120</PlatformToolset>。当我们创建一个Visual C ++项目时,默认平台是 Win32

enter image description here

我注意到PlatformToolset在项目文件的相关摘录中仅针对x64设置了v120。 在这种情况下,如果使用MSBuild命令使用默认平台Win32构建项目,则会出现该错误:&#34; 错误MSB8020:v140的构建工具(Platform Toolset =&#39; v140&#39; )无法找到。&#34;

要解决此问题,您需要在.vcxproj文件中将PlatformToolset更改为v120 for Win32

此外,

  

一种可能性是我在VS2015之后安装了VS2013 - 这是一个   我猜想有点不寻常。这可能是问题吗?

我还在VS2015之后安装了VS2013以重现您的问题,但在更正了PlatformToolset for Win32的值之后,MSBuild构建可以成功而没有任何错误。所以这个问题与安装顺序无关,不需要担心。

希望这可以帮到你。