Làm cách nào để chạy msbuild từ dòng lệnh bằng Windows SDK 7.1?


141

Tôi đang thiết lập hỗ trợ .NET 4.0 trên máy chủ CI của chúng tôi. Tôi đã cài đặt .NET 4.0 và các công cụ .NET từ SDK Windows 7.1.

Trên .NET 2.0 và 3.5, nó chỉ hoạt động. Với .NET 4, khi tôi chạy "Dấu nhắc lệnh Windows SDK 7.1" từ menu Bắt đầu, nó sẽ phàn nàn về

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

Sau đó, khi tôi cố gắng chạy msbuild, tôi nhận được:

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>

Tôi hoàn toàn không thể tin rằng việc cài đặt thời gian chạy và SDK sẽ khiến bạn có một hệ thống không thể chạy msbuild ... tôi đã bỏ lỡ một số bước rõ ràng hoặc che khuất Windows Update, hoặc đã đến lúc bỏ cuộc và bắt đầu hack đường dẫn hệ thống ?


MS Build đang cố gắng xây dựng cái gì? Nếu đó là một dự án C ++, hãy đảm bảo các trình biên dịch x86 đã được cài đặt. Nếu máy chủ CI của bạn là Server Core, hãy đảm bảo bạn đã cài đặt WOW64 (Mặc dù tôi không thành công khi chạy CI trên Server Core)
vcsjones

Không - các ứng dụng web .NET 4.0 đơn giản trên Windows Server 2008 SP1 ...
Dylan Beattie

Erm, vì vậy bạn không thể tin rằng bạn có thể định cấu hình máy chủ xây dựng mà không phải trả phí giấy phép? Giấy phép VS cho phép bạn cài đặt trên nhiều máy. Tôi khuyên bạn nên tận dụng điều đó.
Hans Passant

Là gì %VCTools%biến môi trường thiết lập để? Nó nên được đặt thành một đường dẫn. Có cl.exetồn tại trong con đường đó? Ngoài ra, bạn có trên Windows không phải tiếng Anh không? Tôi đã nghe một số báo cáo về vấn đề này khi cài đặt Windows cục bộ.
vcsjones

Câu trả lời:


292

Để bật msbuildtrong Command Prompt , bạn chỉ cần thêm đường dẫn đến cài đặt .NET 4 Framework trên máy của bạn vào PATHbiến môi trường.

Bạn có thể truy cập các biến môi trường bằng cách:

  1. Nhấp chuột phải vào Máy tính
  2. Nhấp vào Thuộc tính
  3. Sau đó nhấp vào Cài đặt hệ thống nâng cao trên thanh điều hướng bên trái
  4. Trên hộp thoại tiếp theo bấm vào Biến môi trường
  5. Cuộn xuống PATH
  6. Chỉnh sửa nó để bao gồm đường dẫn của bạn đến khung (đừng quên " ; " sau lần nhập cuối cùng ở đây).

Để tham khảo, con đường của tôi là C:\Windows\Microsoft.NET\Framework\v4.0.30319

21/03/18 Cập nhật đường dẫn:

Kể từ MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ trở đi, MSBuild trở đi đã được cài đặt như một phần của Visual Studio .

Để tham khảo, với VS2015 được cài đặt, máy của tôi, đường dẫn của tôi là C:\Program Files (x86)\MSBuild\14.0\Bin


2
Tôi cũng làm điều này để làm cho msbuild luôn có sẵn trong PowerShell
Wiebe Tijsma

36
Chỉ cần nhớ khởi động lại Nhắc sau khi thêm đường dẫn mới.
Campinho

3
Ngoài ra, bạn không thể có bất kỳ khoảng trắng nào sau dấu ';' tính cách.
Michael Fry

4
Đó là thư mục cũ, MSBuild không cài đặt với .NET framework, thực sự ngay cả tại thời điểm nghi vấn nó đã bị phản đối thông tin. msdn.microsoft.com/en-us/l Library / hh162058.aspx
JM Becker

8
Đường dẫn đã thay đổi cho MSBuild 15.0. Bây giờ nó nằm trong thư mục cài đặt VisualStudio 2017. Ví dụ : C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Xem docs.microsoft.com/en-us/visualstudio/msbuild/ từ
Assaf Israel

73

Từ đó Visual Studio 2013trở đi, MSbuildlà một phần của Visual Studio. Trước đó, MSBuild đã được cài đặt như một phần của. Nền tảng NET.

MSBuild được cài đặt trực tiếp dưới % ProgramFiles% . Vì vậy, đường dẫn cho MSBuild có thể khác nhau tùy thuộc vào phiên bản Visual Studio.

Visual Studio 2015, Con đường của MSBuild"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

Visual Studio 15 Preview, Con đường của MSBuild"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

Ngoài ra, một số thuộc tính MSBuild mới đã được thêm vào và một số thuộc tính đã được sửa đổi. Để biết thêm thông tin xem tại đây

Cập nhật 1: VS 2017

Vị trí cho MSBuild đã thay đổi một lần nữa với việc phát hành Visual Studio 2017 . Bây giờ các thư mục cài đặt là dưới %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Vì, tôi có phiên bản Enterprise, vị trí MSBuild cho máy của tôi là"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"


Điều này giúp giải quyết trường hợp của tôi. Tại sao Microsoft không quyết định MỘT vị trí cho tất cả MS Build?
Hoàng Long

7

Sử dụng "Dấu nhắc lệnh dành cho nhà phát triển cho Visual Studio 20XX" thay vì "cmd" sẽ tự động đặt đường dẫn cho msbuild mà không cần phải thêm nó vào các biến môi trường của bạn.


1
Không, nó không (ít nhất là không phải trong môi trường chỉ cài đặt msbuild, nhưng không phải là studio trực quan)
Ezh

6

Tập tin bat của bạn có thể giống như:

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

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

PAUSE

EXIT

1
Đưa đường dẫn đầy đủ đến msbuild có nghĩa là bạn có thể tìm tệp dự án trong thư mục hiện tại, thay vì mã hóa cứng. Một cái gì đó giống như C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projcó thể làm điều đó, mặc dù lưu ý rằng đường dẫn cho các phiên bản mới hơn của MSBuild (khoảng năm 2013) là khác nhau.
jpaugh 16/03/18

6

Đối với Visual Studio 2019 (Ít nhất là xem trước), giờ đây nó đã ở:

C: \ Tệp chương trình (x86) \ Microsoft Visual Studio \ 2019 \ Preview \ MSBuild \ Current \ Bin \ MSBuild.exe

Tôi tưởng tượng quá trình sẽ tương tự cho phiên bản 2019 chính thức.


Chính xác. Trong Visual Studio 2019 đường dẫn là C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex

2

Để có thể xây dựng với cú pháp C # 6, hãy sử dụng điều này trong đường dẫn:

C: \ Tệp chương trình (x86) \ MSBuild \ 14.0 \ Bin


-3

Tập SetEnv.cmdlệnh mà lối tắt "Dấu nhắc lệnh SDK" chạy kiểm tra cl.exeở nhiều nơi trước khi thiết lập các mục để thêm vào PATH. Vì vậy, nó không thể thêm bất cứ điều gì nếu trình biên dịch C gốc không được cài đặt.

Để khắc phục điều đó, áp dụng các bản vá sau đây <SDK install dir>\Bin\SetEnv.cmd. Điều này cũng sẽ sửa các đường dẫn bị thiếu đến các công cụ khác nằm trong <SDK install dir>\Binvà các thư mục con. Tất nhiên, thay vào đó, bạn có thể cài đặt trình biên dịch C để khắc phục lỗi này.

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

 :: --------------------------------------------------------------------------------------------
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.