Visual Studio希望使用错误的平台工具集进行构建

时间:2013-11-29 20:16:03

标签: c++ visual-studio-2010 visual-studio-2012 build-tools

我已将VS2010的解决方案升级到VS2012。 我用其他解决方案做到了这一点,并且工作正常。

但是现在当我尝试构建更新的解决方案时,编译器告诉我:

Error 1596  error MSB8020: The builds tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build using the v100 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install Visual Studio 2010 to build using the Visual Studio 2010 build tools.    C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets   42  5   praat3

我不知道为什么编译器会尝试使用VS2010。

在项目属性页面中,我在“调试源文件”下面看到以下条目:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\crt\src\
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\
etc.

此外,如果我将“Platformtoolset”设置为“从上面的项目继承或项目标准”,则默认为“v100”。我认为这是关于这里出了什么问题的最佳暗示。

偶然我设法打开了Microsoft.Cpp.Platform.targets文件,我看到那里列出了v90和v100,但没有列出v110。

只使用VS2012的人可能会查看该文件吗?

这就是我的样子:

<!--
***********************************************************************************************
Microsoft.Cpp.Platform.targets

WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
          created a backup copy.  Incorrect changes to this file will make it
          impossible to load or build your projects from the command-line or the IDE.

This file defines the steps/targets required to build Visual C++ projects
specifically on x86 platforms.

Copyright (C) Microsoft Corporation. All rights reserved.
***********************************************************************************************
-->

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ToolsetTargetsFound Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\$(PlatformToolset)\Microsoft.Cpp.$(Platform).$(PlatformToolset).targets')">true</ToolsetTargetsFound>
    <VCTargetsPathEffective Condition="'$(ToolsetTargetsFound)' == 'true'">$(VCTargetsPath)</VCTargetsPathEffective>
  </PropertyGroup>

  <!-- Import Before -->
  <Import Condition="Exists('$(VCTargetsPath)\Platforms\$(Platform)\ImportBefore')" Project="$(VCTargetsPath)\Platforms\$(Platform)\ImportBefore\*.targets"/>
  <!-- Import platform toolset file if found in this version -->
  <Import Condition="'$(ToolsetTargetsFound)' == 'true'" Project="$(VCTargetsPath)\Platforms\$(Platform)\PlatformToolsets\$(PlatformToolset)\Microsoft.Cpp.$(Platform).$(PlatformToolset).targets" />
  <!-- Try to find the toolset in older versions  -->
  <Import Condition="'$(ToolsetTargetsFound)' != 'true' and '$(MinSupportedVCTargetsVersion)' != 'v110'" Project="Microsoft.Cpp.Platform.Redirect.targets" />

  <PropertyGroup>
    <PrepareForBuildDependsOn>PlatformPrepareForBuild;$(PrepareForBuildDependsOn)</PrepareForBuildDependsOn>
  </PropertyGroup>

  <Target Name="PlatformPrepareForBuild" DependsOnTargets="$(PlatformPrepareForBuildDependsOn)">
    <PropertyGroup>
      <ConfigurationPlatformExists Condition="'%(ProjectConfiguration.Identity)' == '$(Configuration)|$(Platform)'">true</ConfigurationPlatformExists>
    </PropertyGroup>

    <!-- Error out when building an platform that is not set in the project file -->
    <VCMessage Code="MSB8013" Type="Error" Arguments="$(Configuration)|$(Platform)" Condition="'$(DesignTimeBuild)'!='true' and '$(ConfigurationPlatformExists)' != 'true'"/>

    <!-- Check if toolset exists in Visual Studio 2010 or Dev11 -->
    <VCMessage Code="MSB8020" Type="Error" Arguments="$(_PlatformToolsetShortNameFor_v100);$(PlatformToolset)" Condition="'$(DesignTimeBuild)'!='true' and '$(ToolsetTargetsFound)' != 'true' and '$(PlatformToolset)' == 'v100'" />
    <VCMessage Code="MSB8020" Type="Error" Arguments="$(_PlatformToolsetShortNameFor_v90);$(PlatformToolset)" Condition="'$(DesignTimeBuild)'!='true' and '$(ToolsetTargetsFound)' != 'true' and '$(PlatformToolset)' == 'v90'" />
    <VCMessage Code="MSB8020" Type="Error" Arguments="$(PlatformToolset);$(PlatformToolset)" Condition="'$(DesignTimeBuild)'!='true' and '$(ToolsetTargetsFound)' != 'true' and '$(PlatformToolset)' != 'v90' and '$(PlatformToolset)' != 'v100'" />
  </Target>

  <!-- Import After -->
  <Import Condition="'$(ToolsetTargetsFound)' == 'true' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\ImportAfter')" Project="$(VCTargetsPath)\Platforms\$(Platform)\ImportAfter\*.targets"/>
</Project>

感谢您的帮助。

7 个答案:

答案 0 :(得分:11)

该项目设置为使用VS2010编译器(平台工具集)构建。您可能已卸载VS2010并出现此错误。

您可以在项目属性中更改平台工具集 - &gt; General-&gt; Platform Toolset。 将其更改为Visual Studio 2012。

答案 1 :(得分:2)

在“C / C ++”下,“附加包含目录”中有一个lib。我没有使用这个lib,但它被引用了。我删除了这个lib。

我还删除了注册表中的所有“studio 2010”条目。

答案 2 :(得分:1)

我知道这是一个老线程,但也许这可能会帮助因为类似问题而来到这里的其他人。

我有类似的问题。 VS 2015社区(MSBuild 14)构建一个c ++应用程序,想要使用VS 2010(v100)工具。这一切都归结为msbuild提供了无效的配置选项。奇怪。

因此,请重新检查所有这些选项和参数。

答案 3 :(得分:1)

最近我和VS2017的错误相同。

原来解决方案只是缺少一个依赖项目 如果这是原因,您应该看到类似的内容:

Done building project "someproject.vcxproj" -- FAILED.  

在错误消息后的下一行:

error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found.

由于您的项目可能已被重新定位,因此此错误可能会造成混淆。

答案 4 :(得分:1)

在Windows上使用CMake和VS 15 2017(工具集v141)构建OpenCV时,遇到了与@Greg和@Jahmic相同的问题。

我收到此错误:

错误MSB8020:Visual Studio 2010的生成工具(平台工具集 ='v100')找不到。

目标配置不是在CMAKE_ARGS中为DCMAKE_CONFIGURATION_TYPES首次指定时发生的。

答案 5 :(得分:0)

就我而言,我正在使用针对VS2017的MSbuild命令进行构建。

问题是部分VS2010和部分VS2017的VS解决方案文件转换不完整;在解决方案中转换单个项目不能解决问题,因为解决方案文件在构建级别用于定义构建版本。

要更正它,我在命令行上使用了/Upgrade开关:

SET msbuild="C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe"

%msbuild% .\MyNiceProject.sln /Upgrade

之后,我可以从命令行编译项目,而不会出现错误消息:

%msbuild% .\MyNiceProject.sln /Rebuild "Release|Win32" /Out .\buildinfo.log

答案 6 :(得分:0)

我遇到了同样的问题,发现是由于调用msbuild myLib.vcxproj 而没有选择 msbuild myLib.vcxproj t:Rebuild /p:Configuration=Release;Platform=x64

使用明确的目标调用它可以解决问题

weirdest

也许对某人有帮助?