Comment exécuter msbuild à partir de la ligne de commande à l'aide du SDK Windows 7.1?

141

Je mets en place le support .NET 4.0 sur notre serveur CI. J'ai installé .NET 4.0 et les outils .NET du SDK Windows 7.1.

Sur .NET 2.0 et 3.5, cela fonctionnait. Avec .NET 4, lorsque j'exécute l'invite de commande du SDK Windows 7.1 à partir du menu Démarrer, il se plaint de

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

Ensuite, lorsque j'essaye d'exécuter msbuild, j'obtiens:

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>

Je ne peux pas croire que l'installation du runtime et du SDK vous laissera avec un système qui ne peut pas exécuter msbuild ... ai-je manqué une étape évidente ou obscure Windows Update, ou est-il temps d'abandonner et de commencer à pirater le chemin du système ?

Dylan Beattie
la source
Qu'est-ce que MS Build essaie de construire? S'il s'agit d'un projet C ++, assurez-vous que les compilateurs x86 sont installés. Si votre serveur CI est Server Core, assurez-vous d'installer WOW64 (bien que je n'ai pas réussi à exécuter CI sur Server Core)
vcsjones
Non - applications Web .NET 4.0 simples sur un Windows Server 2008 SP1 ...
Dylan Beattie
Euh, vous ne pouvez donc pas vraiment croire que vous pouvez configurer un serveur de build sans payer les frais de licence? La licence VS vous permet d'installer sur plusieurs machines. Je vous recommande d'en profiter.
Hans Passant
Quelle est la valeur de %VCTools%la variable d'environnement? Il doit être défini sur un chemin. cl.exeExiste- t- il dans ce chemin? De plus, êtes-vous sur un Windows non anglais? J'ai entendu quelques rapports de ce problème sur l'installation localisée de Windows.
vcsjones

Réponses:

292

Pour l'activer msbuilddans l'invite de commandes , il vous suffit d'ajouter le chemin d'accès à l'installation de .NET 4 Framework sur votre machine à la PATHvariable d'environnement.

Vous pouvez accéder aux variables d'environnement en:

  1. Clic droit sur l' ordinateur
  2. Cliquez sur Propriétés
  3. Cliquez ensuite sur Paramètres système avancés dans la barre de navigation de gauche
  4. Dans la boîte de dialogue suivante, cliquez sur Variables d'environnement
  5. Faites défiler jusqu'à PATH
  6. Modifiez-le pour inclure votre chemin vers le framework (n'oubliez pas un " ; " après la dernière entrée ici).

Pour référence, mon chemin était C:\Windows\Microsoft.NET\Framework\v4.0.30319

Mise à jour du chemin 21/03/18:

À partir de MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ et versions ultérieures, MSBuild est désormais installé dans le cadre de Visual Studio .

Pour référence, avec VS2015 installé sur ma machine, mon chemin est C:\Program Files (x86)\MSBuild\14.0\Bin

propagé
la source
2
Je fais cela aussi pour rendre msbuild toujours disponible dans PowerShell
Wiebe Tijsma
36
N'oubliez pas de redémarrer l'invite après avoir ajouté le nouveau chemin.
Campinho
3
De plus, vous ne pouvez pas avoir d'espace blanc après le ';' personnage.
Michael Fry
4
C'est l'ancien répertoire, MSBuild ne s'installe pas avec .NET Framework, même au moment de la question, il était obsolète. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker
8
Le chemin d'accès a changé pour MSBuild 15.0. Il se trouve maintenant dans le répertoire d'installation de VisualStudio 2017. Par exemple: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Voir docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel
73

À Visual Studio 2013partir de maintenant, fait MSbuildpartie de Visual Studio. Auparavant, MSBuild était installé dans le cadre de. NET Framework.

MSBuild est installé directement sous % ProgramFiles% . Ainsi, le chemin d'accès pour MSBuild peut être différent selon la version de Visual Studio.

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

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

De plus, de nouvelles propriétés MSBuild ont été ajoutées et certaines ont été modifiées. Pour plus d'informations, regardez ici

Mise à jour 1: VS 2017

L'emplacement de MSBuild a de nouveau changé avec la sortie de Visual Studio 2017 . Le répertoire d'installation se trouve maintenant sous le %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Depuis, j'ai une édition Entreprise, l'emplacement MSBuild de ma machine est"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"

Abhinav Galodha
la source
7

L'utilisation de «l'invite de commande du développeur pour Visual Studio 20XX» au lieu de «cmd» définira automatiquement le chemin de msbuild sans avoir à l'ajouter à vos variables d'environnement.

DavGarcia
la source
1
Non, ce n'est pas le cas (du moins pas dans un environnement où seul msbuild est installé, mais pas Visual Studio)
Ezh
6

Votre fichier bat pourrait être comme:

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

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

PAUSE

EXIT
Mohith Maratt
la source
1
Donner le chemin complet de msbuild signifie que vous pouvez rechercher un fichier de projet dans le répertoire actuel, au lieu de le coder en dur. Quelque chose comme C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projça pourrait le faire, mais notez que le chemin des nouvelles versions de MSBuild (vers 2013) est différent.
jpaugh
6

Pour Visual Studio 2019 (aperçu, au moins), il est maintenant disponible:

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

J'imagine que le processus sera similaire pour la version officielle 2019.

kaifas
la source
Correct. Dans Visual Studio 2019, le chemin est C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex
2

Pour pouvoir construire avec la syntaxe C # 6, utilisez ceci dans path:

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

Morten Holmgaard
la source
-3

Le SetEnv.cmdscript que le raccourci «Invite de commandes SDK» exécute vérifie cl.exeà divers endroits avant de configurer les entrées à ajouter PATH. Il ne parvient donc pas à ajouter quoi que ce soit si un compilateur C natif n'est pas installé.

Pour résoudre ce problème, appliquez le correctif suivant à <SDK install dir>\Bin\SetEnv.cmd. Cela corrigera également les chemins manquants vers d'autres outils situés dans <SDK install dir>\Binet sous-dossiers. Bien sûr, vous pouvez installer le compilateur C à la place pour contourner ce bogue.

--- 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
la source