ฉันจะเรียกใช้ 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 Update หรือถึงเวลาที่ต้องเลิกและเริ่มแฮ็คเส้นทางของระบบ ?


MS Build พยายามสร้างอะไร ถ้าเป็นโครงการ C ++ ต้องแน่ใจว่าติดตั้งคอมไพเลอร์ x86 แล้ว หากเซิร์ฟเวอร์ CI ของคุณคือเซิร์ฟเวอร์หลักตรวจสอบให้แน่ใจว่าคุณติดตั้ง WOW64 (แม้ว่าฉันจะไม่ประสบความสำเร็จในการใช้งาน CI บนเซิร์ฟเวอร์หลัก)
vcsjones

Nope - แอปพลิเคชันเว็บธรรมดา. NET 4.0 บน Windows Server 2008 SP1 ...
Dylan Beattie

เอ่อดังนั้นคุณไม่อยากจะเชื่อเลยว่าคุณสามารถกำหนดค่าการสร้างเซิร์ฟเวอร์โดยไม่ต้องจ่ายค่าธรรมเนียมใบอนุญาต? สิทธิ์การใช้งาน VS อนุญาตให้คุณติดตั้งบนเครื่องมากกว่าหนึ่งเครื่อง ฉันขอแนะนำให้คุณใช้ประโยชน์จากสิ่งนั้น
Hans Passant

อะไรคือ%VCTools%สภาพแวดล้อมชุดตัวแปร? มันควรจะตั้งเป็นเส้นทาง ไม่cl.exeอยู่ในเส้นทางที่? คุณอยู่บน Windows ที่ไม่ใช่ภาษาอังกฤษหรือไม่ ฉันได้ยินรายงานเกี่ยวกับปัญหานี้ในการติดตั้ง Windows ที่แปลเป็นภาษาท้องถิ่น
vcsjones

คำตอบ:


292

ในการเปิดใช้งานmsbuildในCommand Promptคุณเพียงแค่เพิ่มพา ธ ไปยัง. NET 4 Framework ที่ติดตั้งบนเครื่องของคุณไปยังPATHตัวแปรสภาพแวดล้อม

คุณสามารถเข้าถึงตัวแปรสภาพแวดล้อมได้โดย:

  1. คลิกขวาที่คอมพิวเตอร์
  2. คลิกคุณสมบัติ
  3. จากนั้นคลิกการตั้งค่าระบบขั้นสูงบนแถบนำทางด้านซ้าย
  4. ในกล่องโต้ตอบถัดไปให้คลิกตัวแปรสภาพแวดล้อม
  5. เลื่อนลงไปที่ PATH
  6. แก้ไขเพื่อรวมเส้นทางของคุณไปยังเฟรมเวิร์ก (อย่าลืม " ; " หลังจากรายการสุดท้ายในที่นี่)

สำหรับการอ้างอิงเส้นทางของฉันคือ C:\Windows\Microsoft.NET\Framework\v4.0.30319

3/21/18 การปรับปรุงเส้นทาง:

ในฐานะของ MSBuild 12 (2013) / 2013 VS / .NET 4.5.1+ และเป็นต้นไปMSBuild มีการติดตั้งในขณะนี้เป็นส่วนหนึ่งของภาพสตูดิโอ

สำหรับการอ้างอิงกับ VS2015 ติดตั้งเครื่องของฉันเส้นทางของฉันคือ C:\Program Files (x86)\MSBuild\14.0\Bin


2
ฉันทำเช่นนี้เพื่อให้ msbuild พร้อมใช้งานใน PowerShell เสมอ
Wiebe Tijsma

36
เพียงอย่าลืมรีสตาร์ทพรอมต์หลังจากเพิ่มเส้นทางใหม่
Campinho

3
นอกจากนี้คุณไม่สามารถเว้นวรรคสีขาวหลังจาก ';' ตัวละคร
Michael Fry

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/?hl=th
Assaf Israel

73

จากนั้นVisual Studio 2013เป็นต้นMSbuildมาเป็นส่วนหนึ่งของ Visual Studio ก่อนหน้านี้ MSBuild ได้รับการติดตั้งเป็นส่วนหนึ่งของ . NET Framework

MSBuildติดตั้งโดยตรงภายใต้% ProgramFiles% ดังนั้นเส้นทางสำหรับ MSBuild อาจแตกต่างกันไปขึ้นอยู่กับรุ่นของ Visual Studio

สำหรับVisual Studio 2015Path of MSBuildis"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

สำหรับVisual Studio 15 PreviewPath of 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 จึงเป็นตำแหน่ง MSBuild สำหรับเครื่องของฉัน"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"


7

การใช้ "พรอมต์คำสั่งสำหรับนักพัฒนาสำหรับ Visual Studio 20XX" แทนที่จะเป็น "cmd" จะเป็นการตั้งค่าพา ธ สำหรับ msbuild โดยอัตโนมัติโดยไม่ต้องเพิ่มลงในตัวแปรสภาพแวดล้อมของคุณ


1
ไม่ไม่ (อย่างน้อยก็ไม่ได้อยู่ในสภาพแวดล้อมที่ติดตั้ง msbuild เท่านั้น แต่ไม่ใช่สตูดิโอภาพ)
Ezh

6

ไฟล์ค้างคาวของคุณอาจเป็นเช่น:

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: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Preview \ 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 .
+  )
 )

 :: --------------------------------------------------------------------------------------------
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.