Wie führe ich msbuild über die Befehlszeile mit Windows SDK 7.1 aus?

140

Ich richte die .NET 4.0-Unterstützung auf unserem CI-Server ein. Ich habe .NET 4.0 und die .NET-Tools aus dem Windows 7.1 SDK installiert.

Unter .NET 2.0 und 3.5 hat das einfach funktioniert. Wenn ich unter .NET 4 die "Windows SDK 7.1-Eingabeaufforderung" über das Startmenü ausführe, wird dies beanstandet

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

Wenn ich dann versuche, msbuild auszuführen, erhalte ich:

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>

Ich kann nicht recht glauben, dass Sie durch die Installation der Laufzeit und des SDK ein System erhalten, auf dem msbuild nicht ausgeführt werden kann. Habe ich einen offensichtlichen Schritt verpasst oder Windows Update verdeckt, oder ist es an der Zeit, den Systempfad aufzugeben und zu hacken ?

Dylan Beattie
quelle
Was versucht MS Build zu bauen? Wenn es sich um ein C ++ - Projekt handelt, stellen Sie sicher, dass die x86-Compiler installiert sind. Wenn Ihr CI-Server Server Core ist, stellen Sie sicher, dass Sie WOW64 installieren (obwohl ich keinen Erfolg beim Ausführen von CI auf Server Core hatte)
vcsjones
Nein - einfache .NET 4.0-Webanwendungen auf einem Windows Server 2008 SP1 ...
Dylan Beattie
Ähm, Sie können also nicht glauben, dass Sie einen Build-Server konfigurieren können, ohne die Lizenzgebühr zu zahlen? Mit der VS-Lizenz können Sie auf mehr als einem Computer installieren. Ich würde empfehlen, dass Sie das ausnutzen.
Hans Passant
Auf was ist die %VCTools%Umgebungsvariable eingestellt? Es sollte auf einen Pfad gesetzt werden. Existiert cl.exeauf diesem Weg? Sind Sie auch auf einem nicht englischen Windows? Ich habe einige Berichte über dieses Problem bei der lokalisierten Windows-Installation gehört.
vcsjones

Antworten:

292

So aktivieren Sie msbuildin der Eingabeaufforderung , müssen Sie einfach den Pfad zu dem .NET 4 Framework - hinzuzufügen installiert auf Ihrem Computer diePATH von Umgebungsvariablen.

Sie können auf die Umgebungsvariablen zugreifen, indem Sie:

  1. Klicken Sie mit der rechten Maustaste auf Computer
  2. Klicken Sie auf Eigenschaften
  3. Klicken Sie dann in der linken Navigationsleiste auf Erweiterte Systemeinstellungen
  4. Klicken Sie im nächsten Dialogfeld auf Umgebungsvariablen
  5. Scrollen Sie nach unten zu PATH
  6. Bearbeiten Sie es, um Ihren Pfad zum Framework einzuschließen (vergessen Sie nicht ein " ; " nach dem letzten Eintrag hier).

Als Referenz war mein Weg C:\Windows\Microsoft.NET\Framework\v4.0.30319

21.03.18 Pfadaktualisierung:

Ab MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ und höher ist MSBuild jetzt als Teil von Visual Studio installiert .

Als Referenz: Wenn VS2015 auf meinem Computer installiert ist, lautet mein Pfad C:\Program Files (x86)\MSBuild\14.0\Bin

vermehrt
quelle
2
Ich mache das auch, um msbuild immer in PowerShell verfügbar zu machen
Wiebe Tijsma
36
Denken Sie daran, die Eingabeaufforderung nach dem Hinzufügen des neuen Pfads neu zu starten.
Campinho
3
Außerdem können Sie nach dem ';' keinen Leerraum mehr haben. Charakter.
Michael Fry
4
Dies ist das alte Verzeichnis, das MSBuild nicht mit .NET Framework installiert. Tatsächlich waren es selbst zum Zeitpunkt der Frage veraltete Informationen. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker
8
Der Pfad wurde für MSBuild 15.0 geändert. Es befindet sich jetzt im Installationsverzeichnis von VisualStudio 2017. Zum Beispiel : C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Siehe docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel
72

Ab Visual Studio 2013sofort MSbuildals Teil von Visual Studio. Zuvor wurde MSBuild als Teil von installiert. NET Framework.

MSBuild wird direkt unter % ProgramFiles% installiert . Daher kann der Pfad für MSBuild je nach Version von Visual Studio unterschiedlich sein.

Denn Visual Studio 2015Pfad von MSBuildist"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Denn Visual Studio 15 PreviewPfad von MSBuildist"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

Außerdem wurden einige neue MSBuild-Eigenschaften hinzugefügt und einige geändert. Weitere Informationen finden Sie hier

Update 1: VS 2017

Der Speicherort für MSBuild hat sich mit der Veröffentlichung von Visual Studio 2017 erneut geändert . Jetzt befindet sich das Installationsverzeichnis unter dem %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Da ich eine Enterprise Edition habe, ist der MSBuild-Speicherort für meinen Computer"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"

Abhinav Galodha
quelle
Diese Hilfe löst meinen Fall. Warum entscheidet Microsoft nicht einfach EINEN Ort für MS Build?
Hoàng Long
7

Wenn Sie die "Entwickler-Eingabeaufforderung für Visual Studio 20XX" anstelle von "cmd" verwenden, wird der Pfad für msbuild automatisch festgelegt, ohne dass Sie ihn Ihren Umgebungsvariablen hinzufügen müssen.

DavGarcia
quelle
1
Nein, das ist nicht der Fall (zumindest nicht in einer Umgebung, in der nur msbuild installiert ist, aber kein visuelles Studio)
Ezh
6

Ihre Fledermausdatei könnte wie folgt aussehen:

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

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

PAUSE

EXIT
Mohith Maratt
quelle
1
Wenn Sie den vollständigen Pfad zu msbuild angeben, können Sie im aktuellen Verzeichnis nach einer Projektdatei suchen, anstatt sie fest zu codieren. So etwas C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projkönnte es tun, obwohl zu beachten ist, dass der Pfad für neuere Versionen von MSBuild (circa 2013) anders ist.
Jpaugh
6

Für Visual Studio 2019 (zumindest Vorschau) ist es jetzt in:

C: \ Programme (x86) \ Microsoft Visual Studio \ 2019 \ Vorschau \ MSBuild \ Current \ Bin \ MSBuild.exe

Ich kann mir vorstellen, dass der Prozess für die offizielle Veröffentlichung 2019 ähnlich sein wird.

Kaifas
quelle
Richtig. In Visual Studio 2019 lautet der Pfad C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
Eddex
2

Verwenden Sie diesen Pfad, um mit der C # 6-Syntax erstellen zu können:

C: \ Programme (x86) \ MSBuild \ 14.0 \ Bin

Morten Holmgaard
quelle
-3

Das SetEnv.cmdSkript, das von der Verknüpfung "SDK-Eingabeaufforderung" ausgeführt wird, wird cl.exean verschiedenen Stellen überprüft, bevor Einträge zum Hinzufügen eingerichtet werden PATH. Es kann also nichts hinzugefügt werden, wenn kein nativer C-Compiler installiert ist.

Wenden Sie den folgenden Patch an, um dies zu beheben <SDK install dir>\Bin\SetEnv.cmd. Dadurch werden auch fehlende Pfade zu anderen Tools in <SDK install dir>\Binund Unterordnern behoben. Natürlich können Sie stattdessen den C-Compiler installieren, um diesen Fehler zu umgehen.

--- 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
quelle