Як запустити msbuild з командного рядка за допомогою Windows SDK 7.1?


141

Я налаштовую підтримку .NET 4.0 на нашому сервері CI. Я встановив .NET 4.0 та інструменти .NET із Windows 7.1 SDK.

На .NET 2.0 і 3.5, що тільки працювало. З .NET 4, коли я запускаю "Командний рядок Windows SDK 7.1" у меню "Пуск", він скаржиться на

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

Потім, коли я намагаюся запустити msbuild, я отримую:

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>

Я не можу повністю вірити, що встановлення часу виконання та SDK залишить вас із системою, яка не може запустити msbuild ... чи я пропустив якийсь очевидний крок або затьмарив оновлення Windows, чи пора відмовитися і почати злом системного шляху ?


Що MS Build намагається створити? Якщо це проект C ++, переконайтеся, що встановлені компілятори x86. Якщо для сервера CI є Server Core, переконайтеся, що ви встановили WOW64 (хоча я не мав успіху запустити CI на Server Core)
vcsjones

Nope - звичайні веб-програми .NET 4.0 на Windows Server 2008 SP1 ...
Dylan Beattie,

Ем, так що ви не можете повністю вірити, що ви можете налаштувати сервер збірки, не сплачуючи ліцензійну плату? Ліцензія VS дозволяє встановлювати на декількох машинах. Я рекомендую вам скористатися цим.
Ганс Пасант

Для чого %VCTools%встановлена ​​змінна середовище? Його слід встановити на шлях. Чи cl.exeіснує на цьому шляху? Також ви перебуваєте в не-англійській Windows? Я чув деякі повідомлення про цю проблему під час локалізованої установки Windows.
vcsjones

Відповіді:


292

Щоб включити msbuildв Command Prompt , вам просто потрібно додати шлях до Framework .NET 4 встановити на машині до PATHзмінної оточення.

Ви можете отримати доступ до змінних середовища:

  1. Клацніть правою кнопкою миші на комп'ютері
  2. Клацніть Властивості
  3. Потім натисніть Розширені налаштування системи на лівій панелі навігації
  4. У наступному діалоговому вікні натисніть Змінні середовища
  5. Прокрутіть униз до PATH
  6. Відредагуйте його, щоб включити ваш шлях до фреймворку (не забудьте " ; " після останнього запису тут).

Для довідки, мій шлях був C:\Windows\Microsoft.NET\Framework\v4.0.30319

3/21/18 Оновлення шляху:

Станом на MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ та далі MSBuild тепер встановлюється як частина Visual Studio .

Для довідки, із встановленою на моєму комп'ютері VS2015 моєю дорогою є C:\Program Files (x86)\MSBuild\14.0\Bin


2
Я також це роблю, щоб msbuild завжди був доступний в PowerShell
Wiebe Tijsma

36
Просто не забудьте перезапустити запит після додавання нового шляху.
Кампіньо

3
Крім того, у вас не може бути пробілів після ';' характер.
Майкл Фрай

4
Це старий каталог, MSBuild не встановлюється з .NET Framework, насправді навіть на момент запитання його застаріла інформація. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker

8
Шлях змінився для MSBuild 15.0. Зараз він знаходиться в каталозі встановлення VisualStudio 2017. Наприклад: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Дивіться docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel

73

З цього Visual Studio 2013часу MSbuildвходить до складу Visual Studio. Раніше MSBuild був встановлений у складі. NET Framework.

MSBuild встановлюється безпосередньо під % ProgramFiles% . Отже, шлях до MSBuild може бути різним залежно від версії Visual Studio.

Для Visual Studio 2015, Шлях MSBuildIS"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Для Visual Studio 15 Preview, Шлях MSBuildIS"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

Також додано деякі нові властивості MSBuild, а деякі були змінені. Для отримання додаткової інформації дивіться тут

Оновлення 1: VS 2017

Місце для MSBuild знову змінилося з виходом Visual Studio 2017 . Тепер інсталяційний каталог знаходиться під %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Оскільки у мене є Enterprise Edition, MSBuild місце для моєї машини є"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"


7

Використання "Командного рядка розробника для Visual Studio 20XX" замість "cmd" встановить шлях для msbuild автоматично, не додаючи його до змінних оточення.


1
Ні, це не так (принаймні, не в середовищі, де встановлено лише msbuild, але не візуальна студія)
Ezh

6

Ваш файл bat може бути таким:

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

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

PAUSE

EXIT

1
Надавши повний шлях до msbuild означає, що ви можете шукати файл проекту у поточному каталозі замість жорсткого кодування. Щось подібне C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projможе зробити це, хоча зауважте, що шлях до новіших версій MSBuild (близько 2013 року) відрізняється.
jpaugh

6

Для Visual Studio 2019 (принаймні попередній перегляд) він зараз у:

C: \ Програмні файли (x86) \ Microsoft Visual Studio \ 2019 \ Попередній перегляд \ MSBuild \ Current \ Bin \ MSBuild.exe

Я думаю, процес буде подібний до офіційного випуску 2019 року.


Правильно. У Visual Studio 2019 шлях є C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex


-3

SetEnv.cmdСценарій , що «команда SDK стрімкий» ярлик біжить перевіряє cl.exeв різних місцях до створення запису для додавання PATH. Тож нічого не вдається додати, якщо не встановлений нативний компілятор C.

Щоб виправити це, застосуйте такий патч до <SDK install dir>\Bin\SetEnv.cmd. Це також виправить пропущені шляхи до інших інструментів, розташованих у <SDK install dir>\Binпідпапках. Звичайно, ви можете встановити компілятор C замість цього, щоб обійти цю помилку.

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

 :: --------------------------------------------------------------------------------------------
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.