Почему 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"
Пожалуйста, дайте мне знать, если у вас есть идеи, что блокирует правильную настройку этой переменной.
23 ответа
Для тех, кто не следовал предписанному 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
,
Я получил эту проблему при публикации приложения 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
У меня недавно была та же самая проблема, и после установки различных пакетов в другом порядке это становилось очень грязным. Тогда я нашел этот репозиторий - https://github.com/felixrieseberg/windows-build-tools
npm install --global windows-build-tools
Он устанавливает инструменты сборки Python & VS, необходимые для компиляции большинства узловых модулей. Это сработало!
Для 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 в ближайшие месяцы.
При установке обновления компилятора Microsoft Visual C++ 2010 с пакетом обновления 1 (SP1) для Windows SDK 7.1 исправлено MSB4019
ошибки, которые я получал на Windows7 x64.
В файле readme этого обновления указано, что рекомендуемый порядок
- Visual Studio 2010
- Windows SDK 7.1
- Visual Studio 2010 SP1
- Обновление компилятора Visual C++ 2010 SP1 для Windows SDK 7.1
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.
Иногда такая операция, как установка инструмента, оставляет реестр и / или переменную среды неправильно установленными. Другие ответы - все варианты их исправления.
Единственное, что я должен добавить, - это то, что переменная окружения не работала для меня, когда я остановил трейлинг \
В 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-битных машинах)
Это связано с несоответствием установленных наборов инструментов MSBuild и параметров реестра. Это может произойти, если вы выполнили одно или несколько из следующих действий:
- Установите несколько версий Visual Studio в неправильном порядке
- Удалите одну или несколько версий Visual Studio
- Вручную внесите изменения или изменения в реестр для установки Visual Studio
Единственное безопасное и надежное решение - переустановить вашу ОС. Если вашему проекту требуется несколько версий Visual Studio, сначала установите самую старую версию. Затем исправьте свой код, чтобы вы могли использовать один инструмент для его сборки, иначе вы или ваши коллеги снова окажетесь в том же беспорядке.
Если это не вариант для вас, сначала прочтите /questions/7387762/pochemu-msbuild-ischet-v-c-fajl-microsoftcppdefaultprops-vmesto-cprogram-files-x86msbuild-oshibka-msb4019/7387779#7387779 чтобы лучше понять проблему и то, что на самом деле делают различные "решения". Затем, в зависимости от версии и настройки Visual Studio, может помочь один из других ответов или их вариантов.
Еще несколько подсказок:
У меня была эта проблема на выпуске Visual Studio 2015. Когда я использовал cmake для генерации проекта, появилась эта ошибка.
ошибка MSB4019: импортированный проект "D:\Microsoft.Cpp.Default.props" не найден
Я исправил это, добавив строку
VCTargetsPath
со значением
$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140
в пути реестра
HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14,0
Записи реестра для ключа 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\\'))"
Ничто другое не сработало для меня, кроме установки пути следующим образом:
C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0
В моем случае я добавил переменную среды VCTargetPath
с путем
"C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ Common7 \ IDE \ VC \ VCTargets\"
('\' в конце имеет решающее значение, поскольку файлы решения проекта содержат ссылку на файл "Microsoft cpp target".
Кроме того, начиная с Visual Studio 2017 MSBUILD входит в состав Visual Studio, поэтому PATH variable
необходимо обновить
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin
Обновление VCTargetPath
и MSBUILD PATH
переменные и построение исправили ошибку.
Установка обновления для компилятора Microsoft Visual C++ 2010 с пакетом обновления 1 (SP1) для Windows SDK 7.1 работала для меня. Однако у меня возникли проблемы с обновлением, потому что у меня уже были установлены VS 2010 и VS 2010 SP1. Как упоминалось выше в xverges, файл readme.htm содержит решения для наиболее распространенных проблем установки в разделе "Известные проблемы". Я следовал бы инструкциям в readme.htm и перезагружал ваш компьютер после каждой попытки устранения неполадок, потому что некоторые установки записывают в ваш реестр.
Вместо того, чтобы устанавливать фиксированный путь, сначала попробуйте это в командной строке после сборки:
SET VCTargetsPath=$(VCTargetsPath)
Переменная '$(VCTargetsPath)' кажется связанным с С ++ макросом visual-studio-macro, который не показан в C#-sdk-projects как макрос, но все еще доступен там.
У меня возникла проблема с вызовом msbuild через командную строку и с использованием Visual Studio 2019.
У меня сработало очистить переменную среды перед вызовом msbuild:
установить VCTargetsPath=call%ProgramFiles(x86)% / Microsoft Visual Studio / 2019 / Professional / MSBuild / Current / Bin\msbuild.exe ...
Я вижу это в среде VS2017. Мой скрипт сборки вызывает VsDevCmd.bat
во-первых, и для решения этой проблемы я установил VCTargetsPath
переменная окружения после VsDevCmd
и перед вызовом MSBuild:
set VCTargetsPath=%VCIDEInstallDir%VCTargets
Я удалил VSCode, так как испортил установку. Год назад я установил другую версию, а недавно установил другую. Итак, после удаления всего, начал с нуля. Скачал последнюю версию VSCode и инструменты сборки. Тогда все заработало нормально.
Я столкнулся с той же проблемой с 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 от имени администратора
Это решило мою проблему.
Я столкнулся с этой ошибкой, написав скрипт сборки, который поместил бы 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. Теперь мой файл решения строит.
Я только добавил VCTargetsPath={c:\...}
в качестве переменной среды для моей работы в Гудзоне.
Для записи, файл Microsoft.Cpp.Default.props
может изменить env var VCTargetsPath
и сделать последующее использование этого var неверным. Я имел эту проблему и решил ее, установив VCTargetsPath10
а также VCTargetsPath11
к тому же значению, чем VCTargetsPath
,
Это должно быть адаптировано в соответствии с используемой версией VS.
В моем случае я использовал неправильную версию MSBuild, потому что у меня установлено несколько компиляторов. Я исправил это, указав полный путь в команде (Visual Studio 2022):
"C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe" "C:\path-to-project\myproject.vcxproj"
Добавление к ответу Криса Гонга о VS2017/2019 выше (у меня еще нет разрешения на комментарии).
Если установлены VS 2019 Build Tools, а не полная Visual Studio, пути к файлам немного отличаются. VCTargetsPath тогда должен быть
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\
Также обратите внимание на завершающую обратную косую черту - требуется, по крайней мере, в моем случае (TFS2017, инструменты сборки VS2019). Соответствующее изменение и в записи PATH.