Jak uruchomić msbuild z wiersza poleceń przy użyciu zestawu Windows SDK 7.1?

141

Konfiguruję obsługę .NET 4.0 na naszym serwerze CI. Zainstalowałem .NET 4.0 i narzędzia .NET z zestawu Windows 7.1 SDK.

W .NET 2.0 i 3.5 to po prostu działało. W przypadku .NET 4, kiedy uruchamiam „Wiersz polecenia Windows SDK 7.1” z menu Start, narzeka

The x86 compilers are not currently installed. x86-x86
Please go to Add/Remove Programs to update your installation.
.
Setting SDK environment relative to C:\Program Files\Microsoft
SDKs\Windows\v7.1
\.
Targeting Windows Server 2008 x86 Debug

Następnie, gdy próbuję uruchomić msbuild, otrzymuję:

C:\Program Files\Microsoft SDKs\Windows\v7.1>msbuild
'msbuild' is not recognized as an internal or external command,
operable program or batch file.

C:\Program Files\Microsoft SDKs\Windows\v7.1>

Nie mogę do końca uwierzyć, że zainstalowanie środowiska wykonawczego i SDK pozostawi system, który nie może uruchomić msbuild ... czy przegapiłem jakiś oczywisty krok lub zaciemniłem Windows Update, czy też czas się poddać i zacząć hakować ścieżkę systemową ?

Dylan Beattie
źródło
Co próbuje zbudować MS Build? Jeśli jest to projekt w C ++, upewnij się, że są zainstalowane kompilatory x86. Jeśli Twój serwer CI jest Server Core, upewnij się, że zainstalowałeś WOW64 (chociaż nie udało mi się uruchomić CI na Server Core)
vcsjones
Nie - zwykłe aplikacje internetowe .NET 4.0 na Windows Server 2008 SP1 ...
Dylan Beattie,
Erm, więc nie możesz do końca uwierzyć, że możesz skonfigurować serwer kompilacji bez uiszczenia opłaty licencyjnej? Licencja VS umożliwia instalację na więcej niż jednym komputerze. Zalecam skorzystanie z tego.
Hans Passant,
Na co jest %VCTools%ustawiona zmienna środowiskowa? Powinien być ustawiony na ścieżkę. Czy cl.exeistnieje na tej ścieżce? Czy korzystasz z systemu Windows w wersji innej niż angielska? Słyszałem kilka raportów o tym problemie w zlokalizowanej instalacji systemu Windows.
vcsjones,

Odpowiedzi:

292

Aby włączyć msbuildw wierszu polecenia , wystarczy dodać ścieżkę do instalacji .NET 4 Framework na komputerze do PATHzmiennej środowiskowej.

Dostęp do zmiennych środowiskowych można uzyskać poprzez:

  1. Kliknij prawym przyciskiem myszy Komputer
  2. Kliknij Właściwości
  3. Następnie kliknij Zaawansowane ustawienia systemu na lewym pasku nawigacyjnym
  4. W następnym oknie dialogowym kliknij Zmienne środowiskowe
  5. Przewiń w dół do PATH
  6. Edytuj go tak, aby zawierał ścieżkę do frameworka (nie zapomnij " ; " po ostatnim wpisie w tym miejscu).

Dla porównania moja ścieżka była C:\Windows\Microsoft.NET\Framework\v4.0.30319

Aktualizacja ścieżki z 21.03.18:

Od wersji MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ i nowszych MSBuild jest teraz instalowany jako część programu Visual Studio .

Dla porównania, po zainstalowaniu VS2015 na mojej maszynie moja ścieżka to C:\Program Files (x86)\MSBuild\14.0\Bin

rozmnażane
źródło
2
Robię to również, aby msbuild był zawsze dostępny w PowerShell
Wiebe Tijsma
36
Pamiętaj tylko, aby ponownie uruchomić Monit po dodaniu nowej ścieżki.
Campinho,
3
Nie możesz też mieć spacji po znaku „;” postać.
Michael Fry
4
To jest stary katalog, MSBuild nie instaluje się z frameworkiem .NET, w rzeczywistości nawet w momencie pytania był przestarzały. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker
8
Ścieżka została zmieniona dla programu MSBuild 15.0. Jest teraz w katalogu instalacyjnym VisualStudio 2017. Na przykład: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Zobacz docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel
73

Od tej Visual Studio 2013pory MSbuildjest częścią programu Visual Studio. Wcześniej MSBuild został zainstalowany jako część. NET Framework.

MSBuild jest instalowany bezpośrednio w % ProgramFiles% . Tak więc ścieżka do programu MSBuild może się różnić w zależności od wersji programu Visual Studio.

Bo Visual Studio 2015ścieżka MSBuildjest"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Bo Visual Studio 15 Previewścieżka MSBuildjest"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

Ponadto dodano niektóre nowe właściwości programu MSBuild, a niektóre zostały zmodyfikowane. Więcej informacji znajdziesz tutaj

Aktualizacja 1: VS 2017

Lokalizacja programu MSBuild została ponownie zmieniona wraz z wydaniem programu Visual Studio 2017 . Teraz katalog instalacyjny znajduje się w %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Ponieważ mam wersję Enterprise, lokalizacja MSBuild dla mojego komputera to"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"

Abhinav Galodha
źródło
7

Użycie „Developer Command Prompt for Visual Studio 20XX” zamiast „cmd” spowoduje automatyczne ustawienie ścieżki dla msbuild bez konieczności dodawania jej do zmiennych środowiskowych.

DavGarcia
źródło
1
Nie, nie (przynajmniej nie w środowisku, w którym jest zainstalowany tylko msbuild, ale nie w Visual Studio)
Ezh
6

Twój plik bat mógłby wyglądać następująco:

CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319

msbuild C:\Users\mmaratt\Desktop\BladeTortoise\build\ALL_BUILD.vcxproj

PAUSE

EXIT
Mohith Maratt
źródło
1
Podanie pełnej ścieżki do msbuild oznacza, że ​​możesz szukać pliku projektu w bieżącym katalogu, zamiast kodować go na stałe. Coś takiego C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projmogłoby to zrobić, chociaż zwróć uwagę, że ścieżka dla nowszych wersji MSBuild (około 2013) jest inna.
jpaugh
6

W przypadku programu Visual Studio 2019 (przynajmniej wersja zapoznawcza) jest teraz w:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Preview \ MSBuild \ Current \ Bin \ MSBuild.exe

Wyobrażam sobie, że proces będzie podobny w przypadku oficjalnej wersji 2019.

kaifas
źródło
Poprawny. W programie Visual Studio 2019 ścieżka to C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex
2

Aby móc budować za pomocą składni C # 6, użyj tego w ścieżce:

C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin

Morten Holmgaard
źródło
-3

SetEnv.cmdSkrypt „Wiersz polecenia SDK” Skrót Uruchamia sprawdza cl.exesię w różnych miejscach przed powołaniem wpisy, aby dodać doPATH . Więc nie dodaje niczego, jeśli nie jest zainstalowany natywny kompilator C.

Aby to naprawić, zastosuj następującą poprawkę do <SDK install dir>\Bin\SetEnv.cmd. Spowoduje to również naprawienie brakujących ścieżek do innych narzędzi znajdujących się w <SDK install dir>\Binpodfolderach i. Oczywiście możesz zamiast tego zainstalować kompilator C, aby obejść ten błąd.

--- SetEnv.Cmd_ 2010-04-27 19:52:00.000000000 +0400
+++ SetEnv.Cmd  2013-12-02 15:05:30.834400000 +0400
@@ -228,10 +228,10 @@

 IF "%CURRENT_CPU%" =="x64" (
   IF "%TARGET_CPU%" == "x64" (
+    SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\amd64\cl.exe" (
       SET "VCTools=%VCTools%\amd64;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The x64 compilers are not currently installed.
@@ -239,10 +239,10 @@
       ECHO .
     )
   ) ELSE IF "%TARGET_CPU%" == "IA64" (
+    SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\x86_ia64\cl.exe" (
       SET "VCTools=%VCTools%\x86_ia64;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The IA64 compilers are not currently installed.
@@ -250,10 +250,10 @@
       ECHO .
     )
   ) ELSE IF "%TARGET_CPU%" == "x86" (
+    SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\cl.exe" (
       SET "VCTools=%VCTools%;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The x86 compilers are not currently installed.
@@ -263,10 +263,10 @@
   )
 ) ELSE IF "%CURRENT_CPU%" =="IA64" (
   IF "%TARGET_CPU%" == "IA64" (
+    SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\IA64\cl.exe" (
       SET "VCTools=%VCTools%\IA64;%VCTools%;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The IA64 compilers are not currently installed.
@@ -274,10 +274,10 @@
       ECHO .
     )
   ) ELSE IF "%TARGET_CPU%" == "x64" (
+    SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\x86_amd64\cl.exe" (
       SET "VCTools=%VCTools%\x86_amd64;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The VC compilers are not currently installed.
@@ -285,10 +285,10 @@
       ECHO .
     )
   ) ELSE IF "%TARGET_CPU%" == "x86" (
+    SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\cl.exe" (
       SET "VCTools=%VCTools%;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The x86 compilers are not currently installed.
@@ -298,10 +298,10 @@
   )
 ) ELSE IF "%CURRENT_CPU%"=="x86" (
   IF "%TARGET_CPU%" == "x64" (
+    SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\x86_amd64\cl.exe" (
       SET "VCTools=%VCTools%\x86_amd64;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The x64 cross compilers are not currently installed.
@@ -309,10 +309,10 @@
       ECHO .
     )
   ) ELSE IF "%TARGET_CPU%" == "IA64" (
+    SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\x86_IA64\cl.exe" (
       SET "VCTools=%VCTools%\x86_IA64;%VCTools%;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The IA64 compilers are not currently installed.
@@ -320,10 +320,10 @@
       ECHO .
     )
   ) ELSE IF "%TARGET_CPU%" == "x86" (
+    SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
+    SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
     IF EXIST "%VCTools%\cl.exe" (
       SET "VCTools=%VCTools%;%VCTools%\VCPackages;"
-      SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
-      SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
     ) ELSE (
       SET VCTools=
       ECHO The x86 compilers are not currently installed. x86-x86
@@ -331,15 +331,17 @@
       ECHO .
     )
   )
-) ELSE IF EXIST "%VCTools%\cl.exe" (
-  SET "VCTools=%VCTools%;%VCTools%\VCPackages;"
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
-  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
 ) ELSE (
-  SET VCTools=
-  ECHO The x86 compilers are not currently installed. default
-  ECHO Please go to Add/Remove Programs to update your installation.
-  ECHO .
+  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;"
+  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;"
+  IF EXIST "%VCTools%\cl.exe" (
+    SET "VCTools=%VCTools%;%VCTools%\VCPackages;"
+  ) ELSE (
+    SET VCTools=
+    ECHO The x86 compilers are not currently installed. default
+    ECHO Please go to Add/Remove Programs to update your installation.
+    ECHO .
+  )
 )

 :: --------------------------------------------------------------------------------------------
ivan_pozdeev
źródło