Come eseguo msbuild dalla riga di comando utilizzando Windows SDK 7.1?


141

Sto configurando il supporto .NET 4.0 sul nostro server CI. Ho installato .NET 4.0 e gli strumenti .NET dall'SDK di Windows 7.1.

Su .NET 2.0 e 3.5, ha funzionato. Con .NET 4, quando eseguo il "Prompt dei comandi di Windows SDK 7.1" dal menu Start, si lamenta

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

Quindi quando provo a eseguire msbuild, ottengo:

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>

Non riesco proprio a credere che l'installazione del runtime e dell'SDK ti lasceranno con un sistema che non può eseguire msbuild ... ho perso qualche passaggio ovvio o oscuro Windows Update, o è tempo di rinunciare e iniziare a hackerare il percorso del sistema ?


Cosa sta cercando di costruire MS Build? Se è un progetto C ++, assicurati che i compilatori x86 siano installati. Se il tuo server CI è Server Core, assicurati di installare WOW64 (anche se non ho avuto successo con CI su Server Core)
vcsjones,

No - semplici app Web .NET 4.0 su Windows Server 2008 SP1 ...
Dylan Beattie,

Ehm, quindi non riesci a credere che puoi configurare un server di build senza pagare il canone? La licenza VS consente di installare su più di un computer. Ti consiglierei di approfittarne.
Hans Passant,

Su cosa è %VCTools%impostata la variabile d'ambiente? Dovrebbe essere impostato su un percorso. Esiste cl.exein quel percorso? Inoltre, sei su una Windows non inglese? Ho sentito alcune segnalazioni di questo problema sull'installazione localizzata di Windows.
vcsjones,

Risposte:


292

Per abilitare msbuildnel Prompt dei comandi , è sufficiente aggiungere il percorso all'installazione di .NET 4 Framework sul proprio computer alla PATHvariabile di ambiente.

È possibile accedere alle variabili di ambiente tramite:

  1. Fare clic destro su Computer
  2. Fai clic su Proprietà
  3. Quindi fare clic su Impostazioni di sistema avanzate nella barra di navigazione a sinistra
  4. Nella finestra di dialogo successiva fare clic su Variabili d'ambiente
  5. Scorri verso il basso fino a PATH
  6. Modificalo per includere il tuo percorso verso il framework (non dimenticare un " ; " dopo l'ultima voce qui).

Per riferimento, il mio percorso era C:\Windows\Microsoft.NET\Framework\v4.0.30319

21/03/18 Aggiornamento percorso:

A partire da MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ e successivi, MSBuild è ora installato come parte di Visual Studio .

Per riferimento, con VS2015 installato il mio computer è il mio percorso C:\Program Files (x86)\MSBuild\14.0\Bin


2
Faccio anche questo per rendere msbuild sempre disponibile in PowerShell
Wiebe Tijsma,

36
Ricorda solo di riavviare il Prompt dopo aver aggiunto il nuovo percorso.
Campinho,

3
Inoltre, non è possibile avere spazi bianchi dopo ';' carattere.
Michael Fry,

4
Questa è la vecchia directory, MSBuild non si installa con .NET framework, in realtà anche al momento della domanda erano informazioni deprecate. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker

8
Il percorso è cambiato per MSBuild 15.0. Ora è nella directory di installazione di VisualStudio 2017. Ad esempio: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Vedi docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel

73

Da quel Visual Studio 2013momento, MSbuildarriva come parte di Visual Studio. In precedenza, MSBuild è stato installato come parte di. NET Framework.

MSBuild è installato direttamente in % ProgramFiles% . Pertanto, il percorso per MSBuild potrebbe essere diverso a seconda della versione di Visual Studio.

Perché Visual Studio 2015, Path of MSBuildis"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Perché Visual Studio 15 Preview, Path of MSBuildis"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

Inoltre, sono state aggiunte alcune nuove proprietà di MSBuild e alcune sono state modificate. Per maggiori informazioni guarda qui

Aggiornamento 1: VS 2017

La posizione per MSBuild è stata nuovamente modificata con il rilascio di Visual Studio 2017 . Ora la directory di installazione è sotto il %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Da quando ho un'edizione Enterprise, la posizione di MSBuild per la mia macchina è"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"


7

L'uso del "Prompt dei comandi per sviluppatori per Visual Studio 20XX" anziché "cmd" imposterà automaticamente il percorso per msbuild senza doverlo aggiungere alle variabili di ambiente.


1
No, non lo è (almeno non nell'ambiente in cui è installato solo msbuild, ma non in Visual Studio)
Ez

6

Il tuo file bat potrebbe essere come:

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

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

PAUSE

EXIT

1
Dare il percorso completo a msbuild significa che puoi cercare un file di progetto nella directory corrente, invece di codificarlo. Qualcosa del genere C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projpotrebbe farlo, sebbene si noti che il percorso per le versioni più recenti di MSBuild (circa 2013) è diverso.
jpaugh

6

Per Visual Studio 2019 (almeno Anteprima) è ora in:

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

Immagino che il processo sarà simile per la versione ufficiale del 2019.


Corretta. In Visual Studio 2019 il percorso è C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex,

2

Per essere in grado di compilare con la sintassi C # 6, utilizzare questo nel percorso:

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


-3

Lo SetEnv.cmdscript per cui viene eseguito il collegamento "Prompt dei comandi SDK" controlla cl.exein vari punti prima di impostare le voci da aggiungere PATH. Quindi non riesce ad aggiungere nulla se non è installato un compilatore C nativo.

Per risolvere il problema, applica la seguente patch a <SDK install dir>\Bin\SetEnv.cmd. Questo risolverà anche i percorsi mancanti verso altri strumenti situati nelle <SDK install dir>\Binsottocartelle. Ovviamente, è possibile installare il compilatore C invece di aggirare questo errore.

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

 :: --------------------------------------------------------------------------------------------
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.