it-swarm.com.ru

Почему 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 в качестве переменных среды в Shell не приводит к их отображению как Среда в начале сборки

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

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

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

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

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

108
Peter Kahn

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

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.

47
Peter Kahn

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

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

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

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

npm install --global windows-build-tools

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

24
Luke

Установка Обновление компилятора Microsoft Visual C++ 2010 с пакетом обновления 1 (SP1) для Windows SDK 7.1 исправила ошибки MSB4019, которые я получал на Windows7 x64.

В файле readme этого обновления указано, что рекомендуемый порядок

  1. Visual Studio 2010
  2. Windows SDK 7.1
  3. Visual Studio 2010 SP1
  4. Обновление компилятора Visual C++ 2010 SP1 для Windows SDK 7.1
12
xverges

В 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-битных машинах)
6
KMoraz

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

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

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

VCTargetsPath

со значением 

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

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

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

4
Sjs

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

MSBuild требуются файлы конфигурации, компиляторы и т.д. (Набор инструментов), который соответствует версии 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.

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

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

3
mmesser314

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

2
heatfan

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

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

Записи реестра для ключа 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\\'))"
2
Konstantin Ineshin

Для Visual Studio 2017 в Windows 10

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

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

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

2
Chris Gong

Я просто добавил VCTargetsPath={c:\...} как переменную окружения к моей работе в Hudson.

0
user2818782

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

set VCTargetsPath=%VCIDEInstallDir%VCTargets
0
Hugh

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

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

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

Если это не вариант для вас, сначала прочитайте https://stackoverflow.com/a/41786593/2279059 для лучшего понимания проблемы и того, что на самом деле делают различные «решения». Затем, в зависимости от версии и настройки Visual Studio, может помочь один из других ответов или их вариантов.

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

0
Florian Winter

Я столкнулся с этой ошибкой, написав скрипт сборки, который поместил бы 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. Теперь мой файл решения строит.

0
jxramos

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

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

0
STM