Dlaczego MSBuild wygląda w C: \ for Microsoft.Cpp.Default.props zamiast c: \ Program Files (x86) \ MSBuild? (błąd MSB4019)

124

Kiedy uruchamiam MSBuild, aby zbudować projekt vc2010, pojawia się następujący błąd:

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 znajduje c: \ Program File (x86) \ MSBuild
  • HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolVersions \ V4.0 VCTargetsPath ustawione na $ (MSBuildExtensionsPath32) \ Microsoft.Cpp \ v4.0 \
  • podczas uruchamiania msbuild / verbosity: diag jako dobry system pokazuje MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath ustawione jako środowisko na początku kompilacji
  • ustawienie MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath ustawione jako zmienne środowiskowe w powłoce nie powoduje, że są one wyświetlane jako środowisko na początku kompilacji

Podjęte próby

  • Odinstalowany .net 4.5, naprawiony .net 4.0
  • Ustaw MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath w zmiennych systemowych.

Wygląda na to, że MSBuildExtensionsPath32 nie jest ustawiany poprawnie, a ustawienie MSBuildExtensionsPath nie pomaga

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

Daj mi znać, jeśli masz jakieś pomysły, co blokuje prawidłowe ustawienie tej zmiennej.

Peter Kahn
źródło
6
Wspaniały! Kolejne pytanie o błąd wynikający z uszkodzonej instalacji programu Visual Studio z setkami obejść, z których każde działa tylko w kilku wybranych scenariuszach ...
Florian Winter

Odpowiedzi:

75

Mam ten problem podczas publikowania aplikacji cocos2d-x przy użyciu ich narzędzia wiersza poleceń, które wywołuje MSBuild. Używam 64-bitowego systemu Win 7, VS2013 express, cocos2d-x w wersji 3.3, zainstalowanego .NET Framework 4.5.

Rozwiązałem problem, ustawiając następujące elementy przed uruchomieniem polecenia publikowania cocos.py:

SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
Jeff
źródło
Pomogło mi to zainstalować pakiet węzłów oracledb. Postępowałem zgodnie z instrukcjami na community.oracle.com/docs/DOC-931127, a mimo to otrzymałem błąd MSB4019, który naprawiłem tą odpowiedzią.
Pedro Otero
1
Wersja PowerShell:[Environment]::SetEnvironmentVariable("VCTargetsPath", "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140", "Machine")
fiat
Pomogło w ścieżce zakończonej `` v4.0 ''
Alexander
50

Dla tych, którzy nie zastosowali się do zakazanego nakazu MS (patrz odpowiedź Xv ), nadal możesz rozwiązać problem.

Program MSBuild używa VCTargetsPathdo zlokalizowania domyślnych właściwości CPP, ale nie może, ponieważ w rejestrze brakuje tej wartości ciągu.

Sprawdź wartość ciągu

  • Uruchom regedit
  • Nawigator do HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • Sprawdź VCTargetsPathklucz. Wartość powinna = „ $(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

Naprawić

  • Uruchom regedit Navigator do HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • Dodaj wartość ciągu VCTargetsPath
  • Ustaw wartość na „ $(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

Uwaga: HKLMoznacza HKEY_LOCAL_MACHINE.

Peter Kahn
źródło
12
Wpis rejestru już tam był. Musiałem zdefiniować zmienną środowiskową o tej nazwie ustawionej na wartość w rejestrze, aby przejść dalej:set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0
elmotec
12
u mnie zadziałało tylko z tym zestawemVCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v120
ygaradon
1
@ cmm-user HKLM oznacza, HKEY_LOCAL_MACHINEże zdecydowanie powinieneś go mieć w regedit
Michael Johnston
4
VCTargetsPath nie jest kluczem, ale wartością ciągu!
John Smith
5
Dla mnie to było terazset VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140
Daniel Gray
26

Niedawno miałem ten sam problem i po zainstalowaniu różnych pakietów w różnej kolejności robił się po prostu bałagan. Następnie znalazłem to repozytorium - https://github.com/felixrieseberg/windows-build-tools

npm install --global windows-build-tools

Instaluje narzędzia Python i VS Build, które są wymagane do kompilowania większości modułów węzłów. Udało się!

Łukasz
źródło
1
Dobrze, ale niestety nie działa na platformie Azure.
Aleksey Kontsevich,
6
Dla tych, którzy mogą mieć problem jak ja. Potrzebowałem --productionopcji. npm install --global --production windows-build-tools Zgodnie z instrukcją instalacji node- gyp
eliotRosewater
15

W przypadku programu Visual Studio 2017 i 2019 w systemie Windows 10

Wiele odpowiedzi tutaj dotyczy starszych wersji programu Visual Studio. W przypadku korzystania z wersji Community programu Visual Studio 2017 zadziałało ustawienie zmiennej środowiskowej o nazwie VCTargetsPathi nadanie jej wartości

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

W przypadku korzystania z wersji Community programu Visual Studio 2019,

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

Inne odpowiedzi tutaj ustawiają tę zmienną na c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140 ale zauważyłem, że w mojej instalacji programu Visual Studio nie było folderu o nazwie Microsoft.Cpp w moim folderze MSBuild. Należy więc o tym pamiętać, a także o tym, że powyższa ścieżka dotyczy wersji Community programu Visual Studio 2017.

Ponadto upewnij się, że ścieżka programu MSBuild w zmiennych środowiskowych wskazuje poprawną wersję programu MSBuild, jeśli używasz wersji społeczności programu Visual Studio 2017,

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

Jeśli używasz wersji Community programu Visual Studio 2019,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
Chris Gong
źródło
1
W moim VCTargetPath to C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ BuildTools \ Common7 \ IDE \ VC \ VCTargets
Madura Pradeep
1
Mogą to być również Microsoft Visual Studio\2019\BuildToolslub podobne odmiany - i przypuszczam, że zamiast BuildTools i Community możesz mieć również Professional i Enterprise. vswhere.exe -products * -property installationPathwyszuka wszystkie kombinacje i zwróci lokalizacje wszystkich zainstalowanych produktów.
MSalters
1
'vswhere.exe' is not recognized as an internal or external command, operable program or batch file.
Andrew Koster
13

Zainstalowanie aktualizacji kompilatora Microsoft Visual C ++ 2010 z dodatkiem Service Pack 1 dla zestawu Windows SDK 7.1 naprawiło MSB4019błędy, które tworzyłem w systemie Windows7 x64.

Plik Readme tej aktualizacji stwierdza, że ​​zalecaną kolejnością jest

  1. Visual Studio 2010
  2. Zestaw Windows SDK 7.1
  3. Visual Studio 2010 z dodatkiem SP1
  4. Aktualizacja kompilatora programu Visual C ++ 2010 z dodatkiem SP1 dla zestawu Windows SDK 7.1
xverges
źródło
OK. Wymyśliłem rozwiązanie tego problemu. Dodaj brakujący klucz rejestru. Opublikuję go i zaktualizuję dokumentację konfiguracji, aby postępować zgodnie z tą kolejnością
Peter Kahn
6

W systemach 64-bitowych program MSBuild domyślnie przyjmuje następujące właściwości (gdzie C: to dysk systemowy):

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

Jeśli tak się nie stanie, oznacza to, że masz zainstalowane niestandardowe obiekty docelowe innych firm lub instalacja programu MSBuild jest uszkodzona.

Rzeczy do wypróbowania:

  • Napraw instalację .NET
  • Zastosuj najnowszy dodatek Service Pack dla programu Visual Studio
  • Ustaw MSBuildExtensionsPathręcznie jak powyżej (zwróć uwagę na x86część na komputerach 64-bitowych)
KMoraz
źródło
2
Dzięki, ale te nadal nie są ustawione po: 1) naprawie .net 4.5, 2) odinstalowaniu .net 4.5 i naprawie 4.0. Jeśli ustawię je ręcznie w środowisku, to też nie działa
Peter Kahn
5

Miałem ten problem w wersji Visual Studio 2015. Kiedy użyłem cmake do wygenerowania projektu, pojawił się ten błąd.

błąd MSB4019: Nie znaleziono zaimportowanego projektu „D: \ Microsoft.Cpp.Default.props”

Naprawiłem to, dodając String

VCTargetsPath

z wartością

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

w ścieżce rejestru

HKLM \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 14.0

Sjs
źródło
Zrobiłem to. Uruchomiono ponownie cmd później, ale nie rozwiązuje problemu.
Dan
4

MSBuild w niezależnym narzędziu do kompilacji, które jest często dołączane do innych narzędzi. Być może został zainstalowany na Twoim komputerze z .NET (starsze wersje), Visual Studio (nowsze wersje) lub nawet Team Foundation Build.

Program MSBuild wymaga plików konfiguracyjnych, kompilatorów itp. (Zestawu narzędzi), które są zgodne z wersją programu Visual Studio lub TFS, która będzie go używać, a także wersję platformy .NET, dla której zostanie skompilowany kod źródłowy.

W zależności od sposobu zainstalowania programu MSBuild pliki konfiguracyjne mogą znajdować się w jednej lub kilku z tych ścieżek.

  • 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 \

Jak opisano w innych odpowiedziach, element rejestru i / lub zmienna środowiskowa muszą wskazywać ścieżkę zestawu narzędzi.

  • Klucz VCTargetsPath w HKLM \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0
  • Zmienna środowiskowa VCTargetsPath.

Czasami operacja, taka jak instalacja narzędzia, powoduje nieprawidłowe ustawienie rejestru i / lub zmiennej środowiskowej. Pozostałe odpowiedzi to różne warianty ich naprawy.

Jedyne, co muszę dodać, to to, że zmienna środowiskowa nie działała dla mnie, gdy zostawiłem końcowe \

mmesser314
źródło
To! Wystąpiły problemy z naszym agentem kompilacji bez pełnej instalacji VS2017. Ponownie zainstalowaliśmy „Workload” z danym zestawem narzędzi VC - a nie pojedynczym komponentem, i wykonaliśmy poprawną instalację. Podejrzewamy, że instalator programu Visual Studio nie umieścił odpowiedniego zestawu narzędzi w wersji 141 pod VS2017 podczas naszej instalacji niestandardowego wyboru składników.
Lars Pellarin
Dla mnie to pomogło to naprawić - skrypt, którego używałem, „pomagał” znajdując niewłaściwy plik msbuild.exe i wywołując go jawnie.
Scovetta
4

Wpisy rejestru dotyczące klucza MSBuild działały dobrze. Należy pamiętać, że należy to zrobić dla gałęzi 64-bitowych lub 32-bitowych, w zależności od używanej wersji programu MSBuild. Nie polecam używania zmiennych środowiskowych, ponieważ może to powodować problemy w różnych wersjach programu MSBuild.

Ten plik rejestru rozwiązuje ten problem w obu przypadkach:

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\\'))"
Konstantin Ineshin
źródło
3

Nic innego nie działało dla mnie poza wytyczeniem ścieżki jako:

C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0
sowmiya lakshmi
źródło
jaką ścieżkę mam ustawić?
Nageshwar Reddy Pandem
3

EDYCJA: dotyczy to starszych wersji programu Visual Studio / MSBuild (w szczególności MSVC2015?). W nowszych wersjach program MSBuild jest zawarty w Visual Studio Build Tools 2019, a kompilatory znajdują się w różnych miejscach i są wykrywane na różne sposoby.

Jest to spowodowane niezgodnością zainstalowanych zestawów narzędzi MSBuild i ustawień rejestru. Może się tak zdarzyć, jeśli wykonałeś jedną lub więcej z poniższych czynności:

  • Zainstaluj wiele wersji programu Visual Studio w złej kolejności
  • Odinstaluj co najmniej jedną wersję programu Visual Studio
  • Ręcznie wprowadź zmiany w rejestrze lub modyfikacje instalacji programu Visual Studio

Jedynym bezpiecznym i niezawodnym rozwiązaniem jest ponowna instalacja systemu operacyjnego. Jeśli Twój projekt wymaga wielu wersji programu Visual Studio do skompilowania, najpierw zainstaluj najstarszą wersję . Następnie napraw kod, aby móc go zbudować za pomocą jednego narzędzia. W przeciwnym razie ty lub twoi współpracownicy wkrótce znów będziecie w takim samym bałaganie.

Jeśli nie masz takiej możliwości, przeczytaj najpierw https://stackoverflow.com/a/41786593/2279059, aby lepiej zrozumieć problem i co faktycznie robią różne „rozwiązania”. Następnie, w zależności od wersji i konfiguracji programu Visual Studio, jedna z pozostałych odpowiedzi lub ich odmian może ostatecznie pomóc.

Kilka dodatkowych wskazówek:

Florian Winter
źródło
2

Zainstalowanie aktualizacji kompilatora Microsoft Visual C ++ 2010 z dodatkiem Service Pack 1 dla Windows SDK 7.1 działało dla mnie. Jednak napotkałem problemy z aktualizacją, ponieważ miałem już zainstalowane VS 2010 i VS 2010 SP1. Jak wspomniano powyżej w Xv , plik readme.htm zawiera rozwiązania najczęstszych problemów z instalacją w sekcji „Znane problemy”. Postępowałbym zgodnie z instrukcjami zawartymi w pliku readme.htm i ponownie uruchamiam komputer po każdej próbie rozwiązania problemu, ponieważ niektóre instalacje zapisują w rejestrze.

ciepła
źródło
2

W moim przypadku dodałem zmienną środowiskową VCTargetPathze ścieżką

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

('\' na końcu ma kluczowe znaczenie, ponieważ pliki rozwiązania projektu mają odniesienie do pliku „Microsoft cpp target”).

Ponadto, począwszy od programu Visual Studio 2017, MSBUILD pojawia się w programie Visual Studio - dlatego PATH variablenależy zaktualizować program

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

Aktualizacja VCTargetPathi PATHzmienne MSBUILD oraz kompilacja naprawiły błąd.

Arjun Krishna
źródło
0

Natknąłem się na ten błąd, pisząc skrypt kompilacji, który umieściłby MSBuild na% PATH% po rekurencyjnym przeszukaniu folderu C: \ Windows \ Microsoft.NET w poszukiwaniu znalezionych plików MSBuild.exe. Ostatnim znalezionym trafieniem był katalog, który został umieszczony na ścieżce. Ponieważ dirpolecenie trafiłoby do Framework64folderu po Frameworkotrzymaniu jednego z 64-bitowych MSBuilds umieszczonych na mojej ścieżce. Próbowałem zbudować rozwiązanie Visual Studio 2010 i skończyłem zmieniając mój ciąg wyszukiwania z C:\Windows\Microsoft.NETna, C:\Windows\Microsoft.NET\Frameworktak aby skończyć z 32-bitowym MSBuild.exe. Teraz mój plik rozwiązania jest kompilowany.

jxramos
źródło
0

Właśnie dodałem VCTargetsPath={c:\...}jako zmienną środowiskową do mojej pracy w Hudson.

user2818782
źródło
0

Dla przypomnienia, plik Microsoft.Cpp.Default.propsmoże zmodyfikować zmienną env VCTargetsPathi sprawić, że późniejsze użycie tej zmiennej będzie nieprawidłowe. Miałem ten problem i rozwiązać go przez ustawienie VCTargetsPath10i VCTargetsPath11na taką samą wartość, niżVCTargetsPath .

Należy to dostosować do używanej wersji VS.

STM
źródło
0

Widzę to w środowisku VS2017. Mój skrypt kompilacji wywołuje VsDevCmd.batnajpierw i aby rozwiązać ten problem, ustawiam VCTargetsPathzmienną środowiskową po VsDevCmdi przed wywołaniem programu MSBuild:

set VCTargetsPath=%VCIDEInstallDir%VCTargets
Hugh
źródło
0

Dodając do odpowiedzi Chrisa Gonga na temat VS2017 / 2019 powyżej (nie mam jeszcze uprawnień do komentowania).

Jeśli zamiast pełnego programu Visual Studio są zainstalowane narzędzia do kompilacji VS 2019, ścieżki plików są nieco inne. VCTargetsPath powinno być

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

Zwróć także uwagę na kończący ukośnik odwrotny - wymagany przynajmniej w moim przypadku (narzędzia TFS2017, VS2019 Build). Odpowiednia zmiana we wpisie PATH.

Lars V
źródło
0

Miałem ten sam problem z MSBuild dla VS 17

Rozwiązałem to, wykonując następujące kroki:

  • W moim przypadku Microsoft.Cpp.Default.propsplik znajdował się pod adresem, C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets więc utworzyłem VCTragetsPathw rejestrze ciąg znaków HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0o wartości C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

  • Uruchomiłem też Jenkinsa jako administrator

To rozwiązało mój problem.

Hemant
źródło
0

Zamiast ustawiać stałą ścieżkę, spróbuj najpierw w wierszu poleceń po kompilacji:

SET VCTargetsPath=$(VCTargetsPath)

Zmienna „$ (VCTargetsPath)” wydaje się być powiązanym z C ++ makrem Visual Studio, które nie jest wyświetlane w c # -sdk-projects jako makro, ale jest tam nadal dostępne.

Sam
źródło