.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:
- Al hacer clic derecho en la computadora
- Haga clic en Propiedades
- A continuación, haga clic en Configuración avanzada del sistema en la barra de navegación izquierda
- En el siguiente cuadro de diálogo, haga clic en Variables de entorno
- Desplázate hacia abajo a
PATH
- 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