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

124

Когда я запускаю 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, установленный как Environment в начале сборки
  • установка MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath в качестве переменных среды в оболочке не приводит к тому, что они отображаются как среда при запуске сборки

Попытка исправлений

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

Похоже, что MSBuildExtensionsPath32 настроен неправильно, и установка MSBuildExtensionsPath не помогает

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

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

Питер Кан
источник
6
Большой! Еще один вопрос об ошибке, возникшей в результате поврежденной установки Visual Studio, с сотнями обходных путей, каждый из которых работает только в нескольких избранных сценариях ...
Флориан Винтер,

Ответы:

75

У меня возникла эта проблема при публикации приложения 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
Джефф
источник
Это помогло мне установить пакет узлов oracledb. Я выполнил инструкции на community.oracle.com/docs/DOC-931127, и даже при этом у меня возникла ошибка MSB4019, которую я исправил с помощью этого ответа.
Педро Отеро
1
Версия PowerShell:[Environment]::SetEnvironmentVariable("VCTargetsPath", "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140", "Machine")
fiat
Помогло с путем, заканчивающимся на 'v4.0'
Александр
50

Для тех, кто не следовал запрещенному порядку 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.

Питер Кан
источник
12
Запись в реестре уже была для меня. Мне пришлось определить переменную среды с этим именем, установленным на значение в реестре, чтобы обойти это:set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0
elmotec
12
у меня работает только с этим наборомVCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v120
ygaradon 04
1
@ cmm-user HKLM означает, что HKEY_LOCAL_MACHINEвам обязательно нужно включить его в regedit
Майкл Джонстон
4
VCTargetsPath - это не ключ, а строковое значение!
Джон Смит,
5
Для меня это было сейчасset VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140
Дэниел Грей
26

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

npm install --global windows-build-tools

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

Люк
источник
1
Хорошая вещь, но, к сожалению, не работает для Azure.
Алексей Концевич
6
Для тех, у кого может быть такая проблема, как у меня. Мне нужен был --productionвариант. npm install --global --production windows-build-tools В соответствии с инструкциями по установке node-gyp: github.com/nodejs/node-gyp
eliotRosewater
15

Для 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
Крис Гонг
источник
1
В моем случае VCTargetPath был C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ Common7 \ IDE \ VC \ VCTargets
Мадура Прадип
1
Это также могут быть Microsoft Visual Studio\2019\BuildToolsили похожие варианты - и я полагаю, что вместо BuildTools и Community у вас также могут быть Professional и Enterprise. vswhere.exe -products * -property installationPathвыполнит поиск всех комбинаций и вернет расположение всех установленных продуктов.
MSalters
1
'vswhere.exe' is not recognized as an internal or external command, operable program or batch file.
Эндрю Костер,
13

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

В ознакомительных сведениях об этом обновлении указано, что рекомендуемый порядок

  1. Visual Studio 2010
  2. Windows SDK 7.1
  3. Visual Studio 2010 с пакетом обновления 1 (SP1)
  4. Обновление компилятора Visual C ++ 2010 SP1 для Windows SDK 7.1
xverges
источник
Ну ладно. Я выяснил, как это исправить. Добавьте недостающий ключ реестра. Я выложу его и обновлю свои установочные документы, чтобы следовать этому порядку
Питер Кан
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-битных машинах)
KMoraz
источник
2
Спасибо, но они все еще не установлены после: 1) восстановления .net 4.5, 2) удаления .net 4.5 и восстановления 4.0. Если я установлю их вручную в среде, это тоже не сработает
Питер Кан
5

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

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

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

VCTargetsPath

со значением

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

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

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

SJS
источник
Сделано это. После перезапуска cmd проблема не устранилась.
Дэн
4

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.

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

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

mmesser314
источник
Это! У нас были проблемы с нашим агентом сборки без полной установки VS2017. Мы переустановили «Рабочую нагрузку» с заданным набором инструментов VC, а не с отдельным компонентом, и установка была выполнена правильно. Мы подозреваем, что установщик Visual Studio не поместил правильный набор инструментов v141 в VS2017 во время нашей установки с пользовательским выбором компонентов.
Ларс Пелларин
Для меня это помогло исправить это - сценарий, который я использовал, «помогал» находил неправильный файл msbuild.exe и явно его вызывал.
Сковетта
4

Записи реестра для ключа 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\\'))"
Константин Инешин
источник
3

У меня ничего не сработало, кроме установки пути как:

C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0
Совмия Лакшми
источник
какой путь я должен установить?
Nageshwar Reddy Pandem
3

РЕДАКТИРОВАТЬ: это относится к более старым версиям Visual Studio / MSBuild (в частности, MSVC2015?). В более современных версиях MSBuild включен в Visual Studio Build Tools 2019, а компиляторы расположены в разных местах и ​​обнаруживаются по-разному.

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

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

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

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

Еще несколько советов:

Флориан Винтер
источник
2

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

тепло вентилятор
источник
2

В моем случае я добавил переменную среды 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и PATHпеременные MSBUILD и сборка исправили ошибку.

Арджун Кришна
источник
0

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

jxramos
источник
0

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

user2818782
источник
0

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

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

STM
источник
0

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

set VCTargetsPath=%VCIDEInstallDir%VCTargets
Хью
источник
0

Добавление к ответу Криса Гонга о 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.

Ларс V
источник
0

Я столкнулся с той же проблемой с 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 как администратор

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

Hemant
источник
0

Вместо того, чтобы устанавливать фиксированный путь, сначала попробуйте это в командной строке после сборки:

SET VCTargetsPath=$(VCTargetsPath)

Переменная '$ (VCTargetsPath)' кажется связанным с C ++ макросом visual-studio-macro, который не показан в c # -sdk-projects как макрос, но все еще доступен там.

Сэм
источник