Como executo o msbuild na linha de comando usando o Windows SDK 7.1?

141

Estou configurando o suporte ao .NET 4.0 em nosso servidor de IC. Instalei o .NET 4.0 e as ferramentas .NET do Windows 7.1 SDK.

No .NET 2.0 e 3.5, isso apenas funcionou. Com o .NET 4, quando executo o "Prompt de Comando do Windows SDK 7.1" no menu Iniciar, ele reclama sobre

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

Então, quando tento executar o msbuild, recebo:

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>

Não acredito que a instalação do tempo de execução e do SDK deixará você com um sistema que não pode executar o msbuild ... perdi uma etapa óbvia ou obscuro o Windows Update, ou é hora de desistir e começar a invadir o caminho do sistema ?

Dylan Beattie
fonte
O que o MS Build está tentando criar? Se for um projeto C ++, verifique se os compiladores x86 estão instalados. Se você servidor CI é Server Core, certifique-se de instalar WOW64 (Embora eu não tive sucesso em execução CI no Server Core)
vcsjones
Nope - simples .NET 4.0 aplicações web em um Windows Server 2008 SP1 ...
Dylan Beattie
Erm, então você não pode acreditar que pode configurar um servidor de compilação sem pagar a taxa de licença? A licença do VS permite a instalação em mais de uma máquina. Eu recomendo que você aproveite isso.
Hans Passant
Qual é a %VCTools%variável de ambiente definida para? Deve ser definido como um caminho. Existe cl.exenesse caminho? Além disso, você está em um Windows que não seja o inglês? Ouvi alguns relatos desse problema na instalação localizada do Windows.
vcsjones

Respostas:

292

Para ativar msbuildno prompt de comando , basta adicionar o caminho para a instalação do .NET 4 Framework em sua máquina na PATHvariável de ambiente.

Você pode acessar as variáveis ​​de ambiente:

  1. Botão direito do mouse em Computador
  2. Clique em Propriedades
  3. Em seguida, clique em Configurações avançadas do sistema na barra de navegação esquerda
  4. Na próxima caixa de diálogo, clique em Variáveis ​​de ambiente
  5. Role para baixo até PATH
  6. Edite-o para incluir seu caminho para a estrutura (não esqueça de um " ; " após a última entrada aqui).

Para referência, meu caminho foi C:\Windows\Microsoft.NET\Framework\v4.0.30319

Atualização de caminho de 21/3/18:

A partir do MSBuild 12 (2013) / VS 2013 / .NET 4.5.1 ou superior, o MSBuild agora está instalado como parte do Visual Studio .

Para referência, com o VS2015 instalado minha máquina, meu caminho é C:\Program Files (x86)\MSBuild\14.0\Bin

propagado
fonte
2
Eu faço isso bem para fazer msbuild sempre disponível no PowerShell
Wiebe Tijsma
36
Lembre-se de reiniciar o prompt depois de adicionar o novo caminho.
Campinho
3
Além disso, você não pode ter nenhum espaço em branco após o ';' personagem.
Michael Fry
4
Esse é o diretório antigo, o MSBuild não é instalado com o .NET framework, na verdade, mesmo no momento da pergunta, as informações estavam obsoletas. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker
8
O caminho foi alterado para o MSBuild 15.0. Agora está no diretório de instalação do VisualStudio 2017. Por exemplo: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Consulte docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel
73

A Visual Studio 2013partir de então, MSbuildvem como parte do Visual Studio. Anteriormente, o MSBuild foi instalado como parte do. NET Framework.

O MSBuild é instalado diretamente em % ProgramFiles% . Portanto, o caminho para o MSBuild pode ser diferente dependendo da versão do Visual Studio.

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

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

Além disso, algumas novas propriedades do MSBuild foram adicionadas e outras foram modificadas. Para mais informações veja aqui

Atualização 1: VS 2017

O local do MSBuild mudou novamente com o lançamento do Visual Studio 2017 . Agora o diretório de instalação está sob o %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Como tenho uma edição Enterprise, o local do MSBuild para minha máquina é"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"

Abhinav Galodha
fonte
Isso ajuda a resolver o meu caso. Por que a Microsoft não decide apenas UM lugar para todo o MS Build?
Hoàng Long
7

O uso do "Prompt de Comando do Desenvolvedor para Visual Studio 20XX" em vez de "cmd" definirá o caminho para o msbuild automaticamente, sem a necessidade de adicioná-lo às suas variáveis ​​de ambiente.

DavGarcia
fonte
1
Não, não (pelo menos não em ambiente onde apenas msbuild está instalado, mas não visual studio)
Ezh
6

Seu arquivo bat pode ser como:

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

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

PAUSE

EXIT
Mohith Maratt
fonte
1
Fornecer o caminho completo para o msbuild significa que você pode procurar um arquivo de projeto no diretório atual, em vez de codificá-lo. Algo como isso C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projpode ser feito, embora observe que o caminho para as versões mais recentes do MSBuild (por volta de 2013) é diferente.
jpaugh
6

Para o Visual Studio 2019 (versão prévia, pelo menos), agora está em:

C: \ Arquivos de programas (x86) \ Microsoft Visual Studio \ 2019 \ Preview \ MSBuild \ Current \ Bin \ MSBuild.exe

Eu imagino que o processo será semelhante ao lançamento oficial de 2019.

kaifas
fonte
Corrigir. No Visual Studio 2019, o caminho é C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex 15/04
2

Para poder construir com a sintaxe C # 6, use isso no caminho:

C: \ Arquivos de programas (x86) \ MSBuild \ 14.0 \ Bin

Morten Holmgaard
fonte
-3

O SetEnv.cmdscript que o atalho "prompt de comando do SDK" executa verifica cl.exeem vários locais antes de configurar as entradas a serem adicionadas PATH. Portanto, ele não adiciona nada se um compilador C nativo não estiver instalado.

Para corrigir isso, aplique o seguinte patch em <SDK install dir>\Bin\SetEnv.cmd. Isso também corrigirá os caminhos ausentes para outras ferramentas localizadas em <SDK install dir>\Bine subpastas. Obviamente, você pode instalar o compilador C para solucionar esse bug.

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