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ą ?


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


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"


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.


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

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.


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


-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 .
+  )
 )

 :: --------------------------------------------------------------------------------------------
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.