Почему MSBuild выглядит в C:\для Microsoft.Cpp.Default.props вместо c:\Program Files (x86)\MSBuild? (ошибка MSB4019)

Когда я запускаю msbuild для сборки проекта vc2010, я получаю следующую ошибку:

error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists 
on disk.
  • msbuild находится c:\Program File (x86)\MSBuild
  • HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolVersions\V4.0 VCTargetsPath установлен в $ (MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\
  • при запуске msbuild/verbosity: diag как хорошая система показывает MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath, установленный как Среда в начале сборки
  • установка MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath в качестве переменных среды в оболочке не приводит к их отображению в качестве среды при запуске сборки

Попытки исправить

  • Деинсталлировано .net 4.5, починено .net 4.0
  • Установите MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath в системных переменных.

Похоже, что MSBuildExtensionsPath32 не устанавливается должным образом, и настройка MSBuildExtensionsPath не помогает

SET MSBuildExtensionsPath="C:\Program Files\MSBuild"

Пожалуйста, дайте мне знать, если у вас есть идеи, что блокирует правильную настройку этой переменной.

Ответ 1

Для тех, кто не выполнил запрещенный MS-протокол (см. Xv answer), вы все равно можете устранить проблему.

MSBuild использует VCTargetsPath для поиска свойств cpp по умолчанию, но не может, поскольку в реестре отсутствует это значение строки.

Проверить значение строки

  • Запустить regedit
  • Навигатор HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • Осмотреть VCTargetsPath. Значение должно = "$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\"

Исправить

  • Запустите regedit Navigator с HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • Добавить значение строки VCTargetsPath
  • Задайте значение равным "$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\"

Примечание: HKLM означает HKEY_LOCAL_MACHINE.

Ответ 2

У меня возникла эта проблема при публикации приложения cocos2d-x с помощью инструмента командной строки, который вызывает MSBuild. Я использую 64-разрядную версию Win 7, версию VS2013 Express, версию cocos2d-x версии 3.3, установленную .NET Framework 4.5.

Я исправил проблему, установив следующую команду перед запуском команды публикации cocos.py:

SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120

Ответ 3

У меня была такая же проблема в последнее время, и после установки разных пакетов в другом порядке она просто становилась очень грязной. Затем я нашел это repo - https://github.com/felixrieseberg/windows-build-tools

npm install --global windows-build-tools

Он устанавливает инструменты Python и VS Build, необходимые для компиляции большинства модулей node. Это сработало!

Ответ 5

Для Visual Studio 2017 и 2019 в Windows 10

Многие ответы здесь относятся к более старым версиям Visual Studio. Для меня работало, если я использовал версию сообщества Visual Studio 2017, установив переменную среды с именем VCTargetsPath и присвоив ей значение

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets

Если используется версия сообщества Visual Studio 2019,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160

Другие ответы здесь устанавливают эту переменную на c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140, но я заметил, что в моей установке Visual Studio в моей папке MSBuild не было папки с именем Microsoft.Cpp. Так что имейте это в виду, а также тот факт, что указанный выше путь относится к версии Visual Studio 2017 для сообщества.

Кроме того, убедитесь, что путь MSBuild в переменных среды указывает на правильную версию MSBuild, если вы используете версию сообщества Visual Studio 2017,

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

Если вы используете версию сообщества Visual Studio 2019,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

Ответ 6

В 64-битных системах MSBuild по умолчанию использует следующие свойства (где C: - SystemDrive):

MSBuildExtensionsPath = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath32 = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath64 = C:\Program Files\MSBuild

Если это не так, это означает, что вы либо установили какие-то пользовательские цели переопределения сторонних поставщиков, либо ваша установка MSBuild повреждена.

Что нужно попробовать:

  • Устранить установку .NET
  • Применить последний пакет обновления для Visual Studio
  • Установите MSBuildExtensionsPath вручную, как указано выше (обратите внимание на часть x86 на 64-разрядных машинах)

Ответ 7

У меня была эта проблема на выпуске Visual Studio 2015. Когда я использовал cmake для генерации проекта, появилась эта ошибка.

ошибка MSB4019: импортированный проект "D:\Microsoft.Cpp.Default.props" не найден

Я исправил это, добавив строку

VCTargetsPath

со значением

$ (MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140

в пути реестра

HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14,0

Ответ 8

MSBuild в независимом инструменте построения, который часто связан с другими инструментами. Возможно, он был установлен на вашем компьютере с .NET(более старые версии), Visual Studio (более новые версии) или даже Team Foundation Build.

MSBuild нужны файлы конфигурации, компиляторы и т.д. (ToolSet), которые соответствуют версии Visual Studio или TFS, которые будут ее использовать, а также версии .NET, с которой будет скомпилирован исходный код.

В зависимости от того, как MSBuild был установлен, файлы конфигурации могут быть в одном или нескольких из этих путей.

  • C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\
  • C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\
  • C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\

Как описано в других ответах, элемент реестра и/или переменная окружения должны соответствовать пути ToolSet.

  • Ключ VCTargetsPath под HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • Окружающая переменная VCTargetsPath.

Иногда операция, подобная установке инструмента, оставляет неправильный параметр реестра и/или окружающей среды. Другие ответы - все варианты их исправления.

Единственное, что я должен добавить, это переменная окружения, которая не работает для меня, когда я остановился на конечной\

Ответ 9

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

Этот файл реестра исправляет это в обоих случаях:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\10.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\12.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\10.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\12.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

Ответ 10

Ничто другое не сработало для меня, кроме установки пути следующим образом:

C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0

Ответ 11

Установка Обновление для компилятора Microsoft Visual С++ 2010 для Windows SDK 7.1 работало для меня. Однако у меня возникли проблемы с обновлением, потому что у меня уже установлены VS 2010 и VS 2010 SP1. Как упоминалось  Xv выше, файл readme.htm содержит решения для наиболее распространенных проблем установки в разделе "Известные проблемы". Я буду следовать инструкциям в файле readme.htm и перезагружать ваш компьютер после каждой попытки устранения неполадок, поскольку некоторые из них записывают в ваш реестр.

Ответ 12

Я столкнулся с этой ошибкой, написав Build script, который поместил бы MSBuild в% PATH% после рекурсивного копания через папку C:\Windows\Microsoft.NET для любых найденных файлов MSBuild.exe. Последним найденным ударом был каталог, который был помещен на путь. Поскольку команда dir попала в папку Framework64 после Framework, я получал один из 64-битных MSBuild, установленных на моем пути. Я пытался создать решение Visual Studio 2010 и заново изменил строку поиска от C:\Windows\Microsoft.NET до C:\Windows\Microsoft.NET\Framework, чтобы завершить работу с 32-битным MSBuild.exe. Теперь мой файл решения строит.

Ответ 13

Я просто добавил VCTargetsPath={c:\...} в качестве переменной среды для моей работы Хадсона.

Ответ 14

Для записи файл Microsoft.Cpp.Default.props может изменить env var VCTargetsPath и сделать последующие действия этого var неправильным. Я столкнулся с этой проблемой и решил ее, установив VCTargetsPath10 и VCTargetsPath11 на то же значение, что и VCTargetsPath.

Это должно быть адаптировано в соответствии с используемой версией VS.

Ответ 15

Я вижу это в среде VS2017. Мой скрипт VsDevCmd.bat сначала вызывает VsDevCmd.bat, и для решения этой проблемы я установил VCTargetsPath среды VsDevCmd после VsDevCmd и перед вызовом MSBuild:

set VCTargetsPath=%VCIDEInstallDir%VCTargets

Ответ 16

Это связано с несоответствием установленных наборов инструментов MSBuild и параметров реестра. Это может произойти, если вы выполнили одно или несколько из следующих действий:

  • Установите несколько версий Visual Studio в неправильном порядке
  • Удалите одну или несколько версий Visual Studio
  • Вручную внесите изменения или изменения в реестр для установки Visual Studio

Единственное безопасное и надежное решение - переустановить вашу ОС. Если вашему проекту требуется несколько версий Visual Studio, сначала установите самую старую версию. Затем исправьте свой код, чтобы вы могли использовать один инструмент для его сборки, иначе вы или ваши коллеги снова окажетесь в том же беспорядке.

Если это не вариант для вас, сначала прочтите fooobar.com/questions/80665/... чтобы лучше понять проблему и то, что на самом деле делают различные "решения". Затем, в зависимости от версии и настройки Visual Studio, может помочь один из других ответов или их вариантов.

Еще несколько подсказок:

Ответ 17

Добавление к Крису Гонгу ответа о VS2017/2019 выше (у меня пока нет разрешения на комментарии).

Если вместо полной версии Visual Studio установлены средства сборки VS 2019, пути к файлам немного отличаются. VCTargetsPath должен быть

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\

Также обратите внимание на завершающую обратную косую черту - требуется, по крайней мере, в моем случае (инструменты сборки TFS2017, VS2019). Соответствующее изменение записи PATH также.

Ответ 18

Я столкнулся с той же проблемой с MSBuild для VS 17

Я решил это, применив следующие шаги:

  • В моем случае файл Microsoft.Cpp.Default.props был расположен в C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets поэтому я создал строку VCTragetsPath в реестре под HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 со значением C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

  • Я также заставил мой Jenkins работать от имени администратора

Это решило мою проблему.