Bagaimana cara menjalankan msbuild dari baris perintah menggunakan Windows SDK 7.1?

141

Saya sedang menyiapkan dukungan .NET 4.0 di server CI kami. Saya telah menginstal .NET 4.0, dan alat .NET dari Windows 7.1 SDK.

Pada .NET 2.0 dan 3.5, itu baru saja berfungsi. Dengan .NET 4, ketika saya menjalankan "Windows SDK 7.1 Command Prompt" dari menu Start, ia mengeluh

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

Lalu ketika saya mencoba menjalankan msbuild, saya mendapatkan:

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>

Saya tidak percaya bahwa menginstal runtime dan SDK akan meninggalkan Anda dengan sistem yang tidak dapat menjalankan msbuild ... apakah saya melewatkan beberapa langkah yang jelas atau mengaburkan Pembaruan Windows, atau sekarang saatnya untuk menyerah dan mulai meretas jalur sistem ?

Dylan Beattie
sumber
Apa yang MS Build coba bangun? Jika ini adalah proyek C ++, pastikan kompiler x86 diinstal. Jika Anda server CI adalah Server Core, pastikan Anda menginstal WOW64 (Meskipun saya tidak berhasil menjalankan CI pada Server Core)
vcsjones
Tidak - aplikasi web .NET 4.0 polos pada Windows Server 2008 SP1 ...
Dylan Beattie
Eh, jadi Anda tidak bisa yakin bahwa Anda dapat mengkonfigurasi server build tanpa membayar biaya lisensi? Lisensi VS memungkinkan Anda menginstal di lebih dari satu mesin. Saya sarankan Anda memanfaatkannya.
Hans Passant
Untuk apa %VCTools%variabel lingkungan disetel? Itu harus diatur ke jalan. Apakah cl.exeada di jalur itu? Juga, apakah Anda menggunakan Windows non-Inggris? Saya telah mendengar beberapa laporan tentang masalah ini pada instalasi Windows lokal.
vcsjones

Jawaban:

292

Untuk mengaktifkan msbuilddi Command Prompt , Anda cukup menambahkan path ke .NET 4 Framework install di mesin Anda ke PATHvariabel lingkungan.

Anda dapat mengakses variabel lingkungan dengan:

  1. Mengklik kanan pada Komputer
  2. Klik Properti
  3. Kemudian klik Pengaturan sistem lanjutan di bilah navigasi kiri
  4. Pada kotak dialog berikutnya klik variabel Lingkungan
  5. Gulir ke bawah ke PATH
  6. Edit untuk memasukkan path Anda ke framework (jangan lupa tanda " ; " setelah entri terakhir di sini).

Sebagai referensi, jalan saya adalah C:\Windows\Microsoft.NET\Framework\v4.0.30319

3/21/18 Path Update:

Pada MSBuild 12 (2013) / VS 2013 / .NET 4.5.1+ dan selanjutnya MSBuild sekarang diinstal sebagai bagian dari Visual Studio .

Sebagai referensi, dengan VS2015 diinstal mesin saya jalan saya C:\Program Files (x86)\MSBuild\14.0\Bin

diperbanyak
sumber
2
Saya melakukan ini juga untuk membuat msbuild selalu tersedia di PowerShell
Wiebe Tijsma
36
Ingatlah untuk memulai kembali Prompt setelah menambahkan jalur baru.
Campinho
3
Selain itu, Anda tidak dapat memiliki spasi putih setelah tanda ';' karakter.
Michael Fry
4
Itu adalah direktori lama, MSBuild tidak menginstal dengan .NET framework, sebenarnya bahkan pada saat pertanyaan itu sudah tidak digunakan lagi. msdn.microsoft.com/en-us/library/hh162058.aspx
JM Becker
8
Path telah berubah untuk MSBuild 15.0. Sekarang di bawah direktori instalasi VisualStudio 2017. Sebagai contoh: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin. Lihat docs.microsoft.com/en-us/visualstudio/msbuild/…
Assaf Israel
73

Sejak saat itu Visual Studio 2013, MSbuildhadir sebagai bagian dari Visual Studio. Sebelumnya, MSBuild diinstal sebagai bagian dari. NET Framework.

MSBuild diinstal langsung di bawah % ProgramFiles% . Jadi, jalur untuk MSBuild mungkin berbeda tergantung pada versi Visual Studio.

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

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

Juga, Beberapa properti MSBuild baru telah ditambahkan dan beberapa telah dimodifikasi. Untuk informasi lebih lanjut, lihat di sini

Pembaruan 1: VS 2017

Lokasi untuk MSBuild telah berubah lagi dengan rilis Visual Studio 2017 . Sekarang direktori instalasi berada di bawah %ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\. Karena, saya memiliki edisi Enterprise, lokasi MSBuild untuk mesin saya adalah"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"

Abhinav Galodha
sumber
7

Menggunakan "Prompt Perintah Pengembang untuk Visual Studio 20XX" alih-alih "cmd" akan menetapkan jalur untuk msbuild secara otomatis tanpa harus menambahkannya ke variabel lingkungan Anda.

DavGarcia
sumber
1
Tidak, itu tidak (setidaknya tidak di lingkungan di mana hanya msbuild diinstal, tetapi tidak studio visual)
Ezh
6

File bat Anda bisa seperti:

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

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

PAUSE

EXIT
Mohith Maratt
sumber
1
Memberikan path lengkap ke msbuild berarti Anda dapat mencari file proyek di direktori saat ini, bukan mengkodekannya. Sesuatu seperti C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*projmungkin melakukannya, meskipun perlu dicatat bahwa jalur untuk versi yang lebih baru dari MSBuild (sekitar 2013) berbeda.
jpaugh
6

Untuk Visual Studio 2019 (Pratinjau, setidaknya) sekarang di:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2019 \ Preview \ MSBuild \ Current \ Bin \ MSBuild.exe

Saya membayangkan prosesnya akan serupa untuk rilis resmi 2019.

kaifas
sumber
Benar. Dalam Visual Studio 2019 jalannya adalah C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe.
eddex
2

Agar dapat membangun dengan sintaks C # 6 gunakan ini di jalur:

C: \ Program Files (x86) \ MSBuild \ 14.0 \ Bin

Morten Holmgaard
sumber
-3

The SetEnv.cmdScript bahwa "perintah SDK prompt" shortcut berjalan memeriksa cl.exedi berbagai tempat sebelum menyiapkan entri untuk menambah PATH. Jadi gagal menambahkan apa pun jika kompiler C asli tidak diinstal.

Untuk memperbaikinya, terapkan tambalan berikut ke <SDK install dir>\Bin\SetEnv.cmd. Ini juga akan memperbaiki jalur yang hilang ke alat lain yang berada di dalam <SDK install dir>\Bindan subfolder. Tentu saja, Anda dapat menginstal kompiler C sebagai gantinya untuk mengatasi bug ini.

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