.net-4.0 msbuild sdk

.net 4.0 - ¿Cómo ejecuto msbuild desde la línea de comandos usando Windows SDK 7.1?



.net-4.0 (6)

Estoy configurando la compatibilidad con .NET 4.0 en nuestro servidor CI. Instalé .NET 4.0 y las herramientas .NET del SDK de Windows 7.1.

En .NET 2.0 y 3.5, eso funcionó. Con .NET 4, cuando ejecuto el "Símbolo del sistema de Windows SDK 7.1" desde el menú Inicio, se queja 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

Luego, cuando intento ejecutar msbuild, obtengo:

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>

No puedo creer que la instalación del tiempo de ejecución y el SDK te dejen con un sistema que no puede ejecutar msbuild ... me he perdido un paso obvio u oculto la Actualización de Windows, o es hora de darme por vencido y comenzar a piratear la ruta del sistema ?


Desde Visual Studio 2013 adelante, MSbuild forma parte de Visual Studio. Anteriormente, MSBuild se instaló como parte de. NET Framework.

MSBuild se instala directamente debajo de % ProgramFiles% . Entonces, la ruta para MSBuild podría ser diferente dependiendo de la versión de Visual Studio.

Para Visual Studio 2015 , la ruta de MSBuild es "%ProgramFiles(x86)%/MSBuild/14.0/Bin/MSBuild.exe"

Para Visual Studio 15 Preview , la ruta de MSBuild de MSBuild es "%ProgramFiles(x86)%/MSBuild/15.0/Bin/MSBuild.exe"

Además, se han agregado algunas propiedades nuevas de MSBuild y algunas se han modificado. Para más información mira here

Actualización 1: VS 2017

La ubicación de MSBuild ha cambiado nuevamente con el lanzamiento de Visual Studio 2017 . Ahora el directorio de instalación está bajo %ProgramFiles(x86)%/Microsoft Visual Studio/2017/[VS Edition]/MSBuild/15.0/Bin/ . Como tengo una edición Enterprise, la ubicación de MSBuild para mi equipo es "%ProgramFiles(x86)%/Microsoft Visual Studio/2017/Enterprise/MSBuild/15.0/Bin/MSbuild.exe"


El uso del "Indicador de comando del desarrollador para Visual Studio 20XX" en lugar de "cmd" establecerá la ruta de msbuild automáticamente sin tener que agregarlo a las variables de su entorno.


La SetEnv.cmd comandos SetEnv.cmd que ejecuta el acceso directo " cl.exe sistema de SDK" comprueba cl.exe en varios lugares antes de configurar entradas para agregar a PATH . Por lo tanto, no agrega nada si no está instalado un compilador C nativo.

Para solucionarlo, aplique el siguiente parche a <SDK install dir>/Bin/SetEnv.cmd . Esto también arreglará las rutas que faltan a otras herramientas ubicadas en <SDK install dir>/Bin y subcarpetas. Por supuesto, puede instalar el compilador C para evitar este error.

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


Para habilitar msbuild en Símbolo del sistema , simplemente tiene que agregar la ruta a la instalación de .NET 4 Framework en su máquina a la PATH entorno PATH .

Puede acceder a las variables de entorno de la siguiente manera:

  1. Al hacer clic derecho en la computadora
  2. Haga clic en Propiedades
  3. A continuación, haga clic en Configuración avanzada del sistema en la barra de navegación izquierda
  4. En el siguiente cuadro de diálogo, haga clic en Variables de entorno
  5. Desplázate hacia abajo a PATH
  6. Edítelo para incluir su ruta al marco (no olvide un " ; " después de la última entrada aquí).

Como referencia, mi ruta era C:/Windows/Microsoft.NET/Framework/v4.0.30319

3/21/18 Actualización de ruta:

A partir de MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ y posteriores MSBuild ahora está instalado como parte de Visual Studio .

Como referencia, con VS2015 instalado mi máquina, mi ruta es C:/Program Files (x86)/MSBuild/14.0/Bin


Para poder compilar con la sintaxis C # 6, utiliza esto en la ruta:

C: / Archivos de programa (x86) / MSBuild / 14.0 / Bin


Tu archivo de bat podría ser como:

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