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>

Спасибо вам за помощь.


person tmighty    schedule 29.11.2013    source источник


Ответы (7)


Проект настроен на сборку с помощью компиляторов VS2010 (набор инструментов платформы). Возможно, вы удалили VS2010 и получили эту ошибку.

Вы можете изменить набор инструментов платформы в свойствах проекта->Общие->Набор инструментов платформы. Измените его Visual Studio 2012.

person egur    schedule 29.11.2013
comment
Он уже настроен на Visual Studio 2012 (v110) для проектов в решении. - person tmighty; 30.11.2013
comment
Попробуйте открыть файлы проекта в текстовом редакторе и найдите v100. Все должно быть v110. Также проверьте значение $(VCInstallDir). Если это определено как переменная среды, вам необходимо удалить ее. Он должен указывать на каталог установки VS2012. - person egur; 30.11.2013
comment
Оба отрицательные. Переменная не задана, и файл проекта не содержит v100. - person tmighty; 30.11.2013

Такая же ошибка у меня недавно с VS2017.

Оказалось, что в решении просто отсутствует зависимый проект.
Если причина в этом, вы должны увидеть что-то вроде:

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

на следующей строке после сообщения об ошибке:

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

Эта ошибка может сбивать с толку, так как ваши проекты, возможно, уже были перенацелены.

person Greg    schedule 30.10.2017
comment
То же самое здесь, у меня было недопустимое имя в свойстве конфигурации, которое я передал. Ошибка была отвлекающим маневром. - person thomthom; 27.07.2018
comment
Также было передано недопустимое свойство конфигурации (пустая строка) и получено то же сообщение об ошибке. Может подтвердить, что сообщение об ошибке было отвлекающим маневром (т. е. плохим, вводящим в заблуждение сообщением об ошибке). - person CyberMonk; 12.03.2019

Я столкнулся с той же проблемой, что и @Greg и @Jahmic, при сборке OpenCV в Windows с использованием CMake и VS 15 2017 (набор инструментов v141).

Я получаю эту ошибку:

ошибка MSB8020: не удается найти инструменты сборки для Visual Studio 2010 (набор инструментов платформы = 'v100').

Это происходит, когда целевая конфигурация не указана первой для DCMAKE_CONFIGURATION_TYPES в CMAKE_ARGS.


EDIT (01.12.2020): уточнение для Станислава

Прошло некоторое время, поэтому я надеюсь, что не буду говорить неправильные вещи или больше сбивать вас с толку, поскольку я не эксперт ... Так что отнеситесь к этому ответу очень внимательно, пожалуйста.

В моем случае я создавал свое проектное решение в CI после добавления OpenCV в нашу Superbuild.

Конфигурация Superbuild производилась следующими строками:

cmake.exe -G "Visual Studio 15 2017" -A "x64" ../myProject/Superbuild
cmake.exe --build . --config RelWithDebInfo --target ALL_BUILD

Но OpenCV не поддерживает конфигурацию RelWithDebInfo. Действительно, в нашем файле External-OpenCV.cmake я могу найти:

ExternalProject_Add(OpenCV GIT_REPOSITORY https://github.com/opencv/opencv.git GIT_TAG ${OPENCV_TAG} SOURCE_DIR OpenCV BINARY_DIR OpenCV-build #CMAKE_GENERATOR ${gen} #CMAKE_GENERATOR_PLATFORM x64 CMAKE_ARGS ${ep_common_args} -DCMAKE_CONFIGURATION_DIR ; -DBUILD_SHARED_LIBS:BOOL=OFF -DBUILD_WITH_STATIC_CRT:BOOL=OFF -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_WITH_DEBUG_INFO:BOOL=ON -DBUILD_DOCS:BOOL=OFF -DBUILD_EXAMPLES:BOOL=OFF -DBUILD_PERF_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=OFF -DBUILD_TESTS:BOOL=ON DCMAKE_INSTALL_PREFIX:PATH=${OPENCV_INSTALL_DIR}

Поэтому строки были изменены на эти:

cmake.exe -G "Visual Studio 15 2017" -A "x64" -T v141 ../myProject/Superbuild
cmake.exe --build . --config Release --target ALL_BUILD

Теперь мы поняли, что нам не нужно было добавлять параметр целевой платформы (-T v141), поэтому он был удален.

person Thibault    schedule 06.02.2020
comment
спасибо за ответ, не могли бы вы немного пояснить это на примере? Я столкнулся с подобной проблемой, но не могу ее исправить из-за отсутствия знаний CMake. - person Stanislav; 23.12.2020
comment
Привет, я обновил свой ответ. Я надеюсь, что это поможет вам. - person Thibault; 12.01.2021
comment
большое спасибо за разъяснение! - person Stanislav; 12.01.2021

В разделе «C/C++» в «Дополнительных каталогах включения» была библиотека. Я не использовал эту библиотеку, но на нее ссылались. Я удалил эту библиотеку.

Я также удалил все записи «studio 2010» в реестре.

person tmighty    schedule 30.11.2013

Я знаю, что это старая тема, но, возможно, это может помочь кому-то еще, кто приходит сюда из-за подобных проблем.

У меня была похожая проблема. Сообщество VS 2015 (MSBuild 14), создающее приложение C++, хотело использовать инструменты VS 2010 (v100). Все это привело к тому, что msbuild получил недопустимый параметр конфигурации. Странный.

Итак, перепроверьте все эти параметры и параметры.

person Jahmic    schedule 13.06.2016
comment
Обычно это должно быть исправлено с помощью приглашения «обновить проект» VS2015, но я также обнаружил, что это не всегда работает. - person MicroVirus; 13.06.2016

У меня была та же проблема, и я обнаружил, что она была вызвана вызовом msbuild без параметров, т.е.:

msbuild myLib.vcxproj

Вызов с явной целью решил проблему, то есть:

msbuild myLib.vcxproj t:Rebuild /p:Configuration=Release;Platform=x64

Может кому поможет ????

person filaton    schedule 04.12.2020

В моем случае я собирал с помощью команды MSbuild для VS2017.

Проблема заключалась в неполном преобразовании файла решения VS, который был частично VS2010 и частично VS2017; преобразование отдельных проектов в рамках решения не устранило проблему, поскольку файл решения используется на уровне сборки для определения версии сборки.

Чтобы исправить это, я использовал переключатель /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
person RexBarker    schedule 27.10.2020