Comment exécuter msbuild à partir de la ligne de commande avec Windows SDK 7.1?

Je configure la prise en charge de .NET 4.0 sur notre serveur CI. J’ai installé .NET 4.0 et les outils .NET à partir du SDK Windows 7.1.

Sur .NET 2.0 et 3.5, cela a juste fonctionné. Avec .NET 4, lorsque je lance l’invite “Windows SDK 7.1 Command” à partir du menu Démarrer, il se plaint

The x86 comstackrs 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, quand j’essaie de lancer 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 vraiment croire que l’installation du moteur d’exécution et du SDK vous laissera un système qui ne peut pas exécuter msbuild … ai-je manqué une étape évidente ou une mise à jour de Windows obscure ou est-il temps d’abandonner et de pirater le chemin ?

Pour activer msbuild dans l’invite de commandes , vous devez simplement append le chemin d’access à l’installation de .NET 4 Framework sur votre machine à la variable d’environnement PATH .

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

3/21/18 Mise à jour du chemin:

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

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

À partir de Visual Studio 2013 , MSbuild partie de Visual Studio. Plus tôt, MSBuild était installé dans le cadre de. NET Framework.

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

Pour Visual Studio 2015 , le chemin d’access de MSBuild est "%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Pour Visual Studio 15 Preview , le chemin d’access de MSBuild est "%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

En outre, certaines nouvelles propriétés MSBuild ont été ajoutées et d’autres ont été modifiées. Pour plus d’informations, cliquez ici

Mise à jour 1: VS 2017

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

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

Votre dossier de chauve-souris pourrait ressembler à:

 CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319 msbuild C:\Users\mmaratt\Desktop\BladeTortoise\build\ALL_BUILD.vcxproj PAUSE EXIT 

Pour être capable de construire avec la syntaxe C # 6, utilisez ceci dans le chemin:

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

Le script SetEnv.cmd que le raccourci ” cl.exe commandes SDK” exécute vérifie la cl.exe de cl.exe à différents endroits avant de configurer les entrées à append à PATH . Donc, il ne parvient pas à append quoi que ce soit si un compilateur C natif n’est pas installé.

Pour résoudre ce problème, appliquez le correctif suivant à \Bin\SetEnv.cmd . Cela corrigera également les chemins manquants vers d’autres outils situés dans \Bin et sous-dossiers. Bien sûr, vous pouvez installer le compilateur C plutôt que de 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs 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 comstackrs are not currently installed. default + ECHO Please go to Add/Remove Programs to update your installation. + ECHO . + ) ) :: --------------------------------------------------------------------------------------------