C++ Visual Studio 希望使用错误的平台工具集进行构建
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20292810/
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
Visual Studio wants to build with wrong platform toolset
提问by tmighty
I have upgraded a solution from VS2010 to VS2012. I did that with other solutions, and it worked fine.
我已经将一个解决方案从 VS2010 升级到 VS2012。我用其他解决方案做到了这一点,而且效果很好。
But now when I tried to build the updated solution, the compiler tells me:
但是现在当我尝试构建更新的解决方案时,编译器告诉我:
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
I don't know why the compiler tries to use VS2010.
我不知道为什么编译器会尝试使用 VS2010。
In the project property pages, I see under "Debug source files" the following entries:
在项目属性页中,我在“调试源文件”下看到以下条目:
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.
Also, if I set the "Platformtoolset" to "Inherit from project above or project standard", it defaults to "v100". I think this is the best hint about what goes wrong here.
此外,如果我将“Platformtoolset”设置为“从上面的项目或项目标准继承”,则默认为“v100”。我认为这是关于这里出了什么问题的最好提示。
By accident I managed to open up the Microsoft.Cpp.Platform.targets file, and I see that v90 and v100 are listed there, but not v110.
偶然地,我设法打开了 Microsoft.Cpp.Platform.targets 文件,我看到那里列出了 v90 和 v100,但没有列出 v110。
Could somebody who uses only VS2012 perhaps have a look at that file?
只使用 VS2012 的人可以看看那个文件吗?
This is what it looks like for me:
这对我来说是这样的:
<!--
***********************************************************************************************
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>
Thank you for the help.
感谢您的帮助。
采纳答案by tmighty
Under "C/C++", there was a lib in "Additional include directories". I did not use this lib, but it was referenced. I removed this lib.
在“C/C++”下,“附加包含目录”中有一个库。我没有使用这个库,但它被引用了。我删除了这个库。
I also deleted all "studio 2010" entries in the registry.
我还删除了注册表中的所有“studio 2010”条目。
回答by egur
The project is set to build with VS2010 compilers (platform toolset). You might have uninstalled VS2010 and got this error.
该项目设置为使用 VS2010 编译器(平台工具集)构建。您可能已卸载 VS2010 并收到此错误。
You can change the platform toolset in project properties->General->Platform Toolset. Change it Visual Studio 2012.
您可以在项目属性->常规->平台工具集中更改平台工具集。将其更改为 Visual Studio 2012。
回答by Greg
Same error for me recently with VS2017.
最近使用 VS2017 对我来说同样的错误。
Turned out the solution was merely missing a dependent project.
If this is the cause, you should see something like:
原来解决方案只是缺少一个依赖项目。
如果这是原因,您应该看到如下内容:
Done building project "someproject.vcxproj" -- FAILED.
on the next line after the error message:
在错误消息后的下一行:
error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found.
This error can be confusing since your projects may have already been retargeted.
此错误可能会令人困惑,因为您的项目可能已被重新定位。
回答by Jahmic
I know this is an old thread, but perhaps this might help somebody else who comes here because of similar issues.
我知道这是一个旧线程,但也许这可能会帮助因类似问题来到这里的其他人。
I had a similar problem. VS 2015 Community (MSBuild 14) building a c++ app, wanted to use VS 2010 (v100) tools. It all came down giving msbuild an invalid configuration option. Strange.
我有一个类似的问题。VS 2015 社区 (MSBuild 14) 构建了一个 c++ 应用程序,想使用 VS 2010 (v100) 工具。这一切都给了 msbuild 一个无效的配置选项。奇怪的。
So, recheck all those options and parameters.
因此,请重新检查所有这些选项和参数。
回答by Thibault
I have met the same issue as @Greg and @Jahmic when building OpenCV on Windows using CMake and VS 15 2017 (toolset v141).
在使用 CMake 和 VS 15 2017(工具集 v141)在 Windows 上构建 OpenCV 时,我遇到了与 @Greg 和 @Jahmic 相同的问题。
I get this error:
我收到此错误:
error MSB8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found.
错误 MSB8020:找不到 Visual Studio 2010 的构建工具(平台工具集 = 'v100')。
It happens when the target config is not the first specified for DCMAKE_CONFIGURATION_TYPES in the CMAKE_ARGS.
当目标配置不是第一个为 CMAKE_ARGS 中的 DCMAKE_CONFIGURATION_TYPES 指定时,就会发生这种情况。