web-dev-qa-db-ja.com

Visual Studioは間違ったプラットフォームツールセットでビルドしたい

ソリューションを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>

お手伝いありがとう。

13
tmighty

「C/C++」では、「追加のインクルードディレクトリ」にlibがありました。私はこのlibを使用しませんでしたが、参照されました。このlibを削除しました。

レジストリの「studio 2010」エントリもすべて削除しました。

2
tmighty

プロジェクトはVS2010コンパイラー(プラットフォームツールセット)でビルドするように設定されています。 VS2010をアンインストールしてこのエラーが発生した可能性があります。

プロジェクトのプロパティ->全般->プラットフォームツールセットでプラットフォームツールセットを変更できます。 Visual Studio 2012に変更します。

10
egur

最近VS2017で同じエラーが発生しました。

解決策は依存するプロジェクトが欠けているだけであることがわかりました。
これが原因である場合は、次のように表示されます。

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

エラーメッセージの後の次の行:

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

プロジェクトがすでにリターゲットされている可能性があるため、このエラーは混乱を招く可能性があります。

4
Greg

私はこれが古いスレッドであることを知っていますが、おそらくこれは同様の問題のためにここに来る他の誰かを助けるかもしれません。

同様の問題がありました。 VS 2015コミュニティ(MSBuild 14)は、VS 2010(v100)ツールを使用したいc ++アプリを構築しています。それはすべてmsbuildに無効な構成オプションを与えてダウンしました。奇妙な。

したがって、これらのオプションとパラメーターをすべて再確認してください。

1
Jahmic

CMakeとVS 15 2017(ツールセットv141)を使用してWindowsでOpenCVをビルドするときに、@ Gregおよび@Jahmicと同じ問題に遭遇しました。

私はこのエラーを受け取ります:

エラーMSB8020:Visual Studio 2010(プラットフォームツールセット= 'v100')のビルドツールが見つかりません。

これは、ターゲット構成がCMAKE_ARGSのDCMAKE_CONFIGURATION_TYPESに最初に指定されていない場合に発生します。

1
Thibault