2011-06-12 12 views
96

Estoy configurando la compatibilidad con .NET 4.0 en nuestro servidor de CI. Instalé .NET 4.0 y las herramientas .NET del SDK de Windows 7.1.¿Cómo ejecuto msbuild desde la línea de comandos con Windows SDK 7.1?

En .NET 2.0 y 3.5, que funcionó. Con .NET 4, cuando ejecuto el "SDK de Windows 7.1 Símbolo del sistema" en el menú de inicio, que 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 trato de ejecutar msbuild, me sale:

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> 

I 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 ... ¿he olvidado algún paso obvio u oculto la Actualización de Windows, o es hora de rendirme y comenzar a piratear la ruta del sistema?

+0

¿Qué está intentando compilar MS Build? Si se trata de un proyecto de C++, asegúrese de que los compiladores x86 estén instalados. Si su servidor CI es Server Core, asegúrese de instalar WOW64 (aunque no he tenido éxito al ejecutar CI en Server Core) – vcsjones

+0

No, las aplicaciones web simples .NET 4.0 en un Windows Server 2008 SP1 ... –

+0

Erm, por lo que ¿No puede creer que puede configurar un servidor de compilación sin pagar la tarifa de la licencia? La licencia de VS le permite instalar en más de una máquina. Te recomendaría que aproveches eso. –

Respuesta

224

Para habilitar msbuild en símbolo de sistema, sólo tiene que añadir la ruta a .NET Framework 4 instalar en su máquina a la variable de entorno PATH.

Se puede acceder a las variables de entorno por:

  1. clic derecho en los ordenador
  2. Haga clic 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. de desplazamiento hacia abajo para PATH
  6. editarlo para incluir su camino hacia el marco (no se olvide de un "; "después de la última entrada de aquí).

Como referencia, mi camino era C:\Windows\Microsoft.NET\Framework\v4.0.30319.

+2

Hago esto también para hacer msbuild siempre disponible en PowerShell –

+20

Solo recuerde reiniciar el mensaje después de agregar la nueva ruta. – Campinho

+2

Además, no puede tener ningún espacio en blanco después del ';' personaje. –

-2

El guión SetEnv.cmd que el 'SDK símbolo del sistema' atajo ejecuta comprobaciones de cl.exe en varios lugares antes de configurar las entradas añadir a PATH. por lo tanto, no puede agregar nada si un compilador C nativa no está instalado.

para corregir esto, se aplica el siguiente parche para <SDK install dir>\Bin\SetEnv.cmd. Esto también va a arreglar caminos desaparecidos a otras herramientas ubicadas en <SDK install dir>\Bin y subcarpetas. Por supuesto, tu Puede instalar el compilador de 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 . 
+ ) 
) 

:: -------------------------------------------------------------------------------------------- 
4

Su bat podría ser como:

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

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

PAUSA

SALIDA

35

De Visual Studio 2013 en adelante, MSbuild viene como parte de Visual Studio. Anteriormente, MSBuild se instaló como parte de. NET Framework.

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

Para Visual Studio 2015, Senda de MSBuild es "%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Para Visual Studio 15 Preview, Senda de MSBuild es "%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

Además, algunas nuevas propiedades MSBuild se ha añadido

y algunos han sido modificados. Para más información lee here

Actualización 1: VS 2017

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

1

Para poder construir con C# 6 sintaxis de emplearlo en el camino:

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

2

El uso del "Indicador de comandos 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 entorno.

Cuestiones relacionadas