web-dev-qa-db-fra.com

Visual Studio veut construire avec un mauvais ensemble d'outils de plateforme

J'ai mis à niveau une solution de VS2010 à VS2012. Je l'ai fait avec d'autres solutions, et cela a bien fonctionné.

Mais maintenant, quand j'ai essayé de construire la solution mise à jour, le compilateur me dit:

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

Je ne sais pas pourquoi le compilateur essaie d'utiliser VS2010.

Dans les pages de propriétés du projet, je vois sous "Debug source files" les entrées suivantes:

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.

De plus, si je définis le "Platformtoolset" sur "Hériter du projet ci-dessus ou de la norme de projet", il est par défaut "v100". Je pense que c'est le meilleur indice de ce qui ne va pas ici.

Par accident, j'ai réussi à ouvrir le fichier Microsoft.Cpp.Platform.targets, et je vois que la v90 et la v100 y sont répertoriées, mais pas la v110.

Est-ce que quelqu'un qui utilise uniquement VS2012 pourrait peut-être jeter un œil à ce fichier?

Voilà à quoi ça ressemble pour moi:

<!--
***********************************************************************************************
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>

Merci pour l'aide.

13
tmighty

Sous "C/C++", il y avait une bibliothèque dans "Additional include directory". Je n'ai pas utilisé cette lib, mais elle a été référencée. J'ai supprimé cette lib.

J'ai également supprimé toutes les entrées "studio 2010" du registre.

2
tmighty

Le projet est configuré pour être compilé avec des compilateurs VS2010 (jeu d'outils de plateforme). Vous avez peut-être désinstallé VS2010 et obtenu cette erreur.

Vous pouvez modifier le jeu d'outils de plateforme dans les propriétés du projet -> Général -> Jeu d'outils de plateforme. Modifiez-le Visual Studio 2012.

10
egur

Même erreur pour moi récemment avec VS2017.

Il s'est avéré que la solution manquait simplement un projet dépendant.
Si c'est la cause, vous devriez voir quelque chose comme:

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

sur la ligne suivante après le message d'erreur:

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

Cette erreur peut être déroutante car vos projets peuvent déjà avoir été reciblés.

4
Greg

Je sais que c'est un vieux fil, mais cela pourrait peut-être aider quelqu'un d'autre qui vient ici à cause de problèmes similaires.

J'avais un problème similaire. La communauté VS 2015 (MSBuild 14), qui construit une application c ++, souhaitait utiliser les outils VS 2010 (v100). Tout est tombé en donnant à msbuild une option de configuration invalide. Étrange.

Donc, revérifiez toutes ces options et paramètres.

1
Jahmic

J'ai rencontré le même problème que @Greg et @Jahmic lors de la construction d'OpenCV sur Windows à l'aide de CMake et VS 15 2017 (ensemble d'outils v141).

Je reçois cette erreur:

erreur MSB8020: les outils de génération pour Visual Studio 2010 (Platform Toolset = 'v100') sont introuvables.

Cela se produit lorsque la configuration cible n'est pas la première spécifiée pour DCMAKE_CONFIGURATION_TYPES dans CMAKE_ARGS.

1
Thibault