Bagaimana saya bisa secara terprogram mendapatkan jalur ke MSBuild dari mesin tempat .exe saya berjalan?
Saya bisa mendapatkan versi .NET dari Lingkungan tetapi apakah ada cara untuk mendapatkan folder yang benar untuk versi .NET?
Mengaduk-aduk registri, sepertinya
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
mungkin apa yang Anda cari; jalankan regedit.exe dan lihatlah.
reg.exe query "HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" /v MSBuildToolsPath
dir HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\
Anda juga dapat mencetak jalur MSBuild.exe ke baris perintah:
sumber
/reg:32
atau/reg:64
pada kedua bitnessesscmd
(atau proses apa pun yang Anda jalankan) untuk mendapatkan jalur itu secara eksplisit.Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\4.0\MSBuildToolsPath
Jika Anda ingin menggunakan MSBuild untuk .Net 4, Anda dapat menggunakan perintah PowerShell berikut untuk mendapatkan jalur yang dapat dieksekusi. Jika Anda menginginkan versi 2.0 atau 3.5 maka ubah saja variabel $ dotNetVersion.
Untuk menjalankan executable Anda harus menambahkan variabel $ msbuild dengan &. Itu akan mengeksekusi variabel.
sumber
$dotNetVersion
12.0 (vs 2013) dan 14.0 (vs 2015) (jika dipasang tentu saja)HKLM:\software\Microsoft\MSBuild\ToolsVersions
kunci. Sebagai gantinya Anda perlu mendapatkan direktori instalasi VS2017 dariHKLM:\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7\15.0
, lalu tambahkanMSBuild\15.0\Bin\MSBuild.exe
untuk mendapatkan lokasi MSBuild EXE.Untuk skrip shell cmd di Windows 7, saya menggunakan fragmen berikut di file batch saya untuk menemukan MSBuild.exe di .NET Framework versi 4. Saya berasumsi ada versi 4, tetapi jangan menganggap sub-versi. Ini tidak sepenuhnya untuk tujuan umum, tetapi untuk skrip cepat mungkin berguna:
Untuk penggunaan saya, saya keluar dari file batch dengan kesalahan jika itu tidak berhasil:
sumber
set bb.build.msbuild.exe=
? Apakah itu diperlukan atau hanya artefak dari penyiapan Anda?Anda dapat menggunakan Perintah PowerShell uji coba ini untuk mendapatkan
MSBuildToolsPath
dari registri.PowerShell (dari registri)
Keluaran
atau dari sistem file
PowerShell (dari sistem file)
Keluaran
sumber
Petunjuk untuk menemukan MSBuild :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe
Petunjuk untuk menemukan VSTest :
&"${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -prerelease -products * -requires Microsoft.VisualStudio.PackageGroup.TestTools.Core -find Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
(Perhatikan bahwa petunjuk di atas sedikit dimodifikasi dari petunjuk resmi Microsoft. Secara khusus, saya telah menyertakan
-prerelease
tanda untuk memungkinkan penginstalan Pratinjau dan RC diambil, dan-products *
untuk mendeteksi penginstalan Visual Studio Build Tools.)Hanya butuh waktu lebih dari dua tahun, tetapi akhirnya pada 2019, Microsoft telah mendengarkan dan memberi kami cara untuk menemukan file executable penting ini ! Jika Anda memiliki Visual Studio 2017 dan / atau 2019 diinstal,
vswhere
utilitas dapat ditanyai untuk lokasi MSBuild et al. Karenavswhere
selalu berada di%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
, tidak ada bootstrap dan tidak diperlukan lagi hardcoding jalur.Keajaiban adalah
-find
parameternya, ditambahkan pada versi 2.6.2 . Anda dapat menentukan versi yang telah Anda instal dengan menjalankanvswhere
, atau memeriksa properti filenya. Jika Anda memiliki versi yang lebih lama, Anda dapat mengunduh yang terbaru dan menimpa yang sudah ada%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe
.vswhere.exe
adalah eksekusi mandiri, sehingga Anda dapat mengunduh dan menjalankannya dari mana pun Anda memiliki koneksi internet. Artinya, skrip build Anda dapat memeriksa apakah lingkungan tempat mereka berjalan telah disiapkan dengan benar, untuk menyebutkan salah satu opsi.sumber
msbuild
di baris perintah (terutama baris perintah Visual Studio jika menggunakan itu), itulah yang akan digunakan. Untuk melihat apa yang akan digunakan jika Anda mengetikmsbuild
pada baris perintah, lakukan ini:where msbuild
. Jika itu tidak melaporkan sama seperti VSWHERE mengatakan yang terbaru dan terhebat, maka Anda harus melakukan jalur lengkap ke yangmsbuild.exe
ingin Anda gunakan, atau membuat penyesuaian pada variabel PATH Anda agar sesuai.vswhere.exe
dan menggunakannya secara langsung.@AllenSanborn memiliki versi PowerShell yang bagus, tetapi beberapa orang memiliki persyaratan untuk hanya menggunakan skrip batch untuk build.
Ini adalah versi terapan dari apa yang dijawab @ bono8106.
msbuildpath.bat
build.bat
Untuk Visual Studio 2017 / MSBuild 15, Aziz Atif (orang yang menulis Elmah ) menulis skrip batch
https://github.com/linqpadless/LinqPadless/blob/master/build.cmd
sumber
Ini berfungsi untuk Visual Studio 2015 dan 2017:
sumber
vswhere -products *
, seperti yang ditentukan di github.com/Microsoft/vswhere/wiki/Find-MSBuild .Lokasi Registry
berikan lokasi untuk eksekusi.
Tetapi jika Anda membutuhkan lokasi tempat menyimpan ekstensi Tugas, itu aktif
sumber
mungkin cara termudah untuk membuka PowerShell dan masuk
sumber
Satu baris berdasarkan jawaban @ dh_cgn :
(Resolve-Path ([io.path]::combine(${env:ProgramFiles(x86)}, 'Microsoft Visual Studio', '*', '*', 'MSBuild', '*' , 'bin' , 'msbuild.exe'))).Path
Ini memilih semua jalur yang ada misalnya.
C:\Program Files (x86)\Microsoft Visual Studio\*\*\MSBuild\*\bin\msbuild.exe
.Bintang wildcard adalah:
Ketahuilah bahwa perintah ini memilih jalur pertama yang cocok dengan ekspresi yang diurutkan berdasarkan alfabet. Untuk mempersempitnya, ganti saja wildcard dengan elemen tertentu misalnya. tahun atau versi alat.
sumber
Di Windows 2003 dan yang lebih baru, ketik perintah ini di cmd:
Jika tidak ada yang muncul, itu berarti bahwa kerangka .NET tidak termasuk dalam PATH sistem. MSBuild harus ada di folder instalasi .NET, bersama dengan kompiler .NET (vbc.exe, csc.exe)
sumber
Dimulai dengan MSBuild 2017 (v15), MSBuild sekarang diinstal di folder di bawah setiap versi Visual Studio
Berikut beberapa contoh tempat MSBuild.exe ditemukan di komputer saya:
sumber
Untuk mengambil lintasan msbuild 15 (Visual Studio 2017) dengan batch dari registri tanpa alat tambahan:
Alat yang tersedia lebih baik:
sumber
Anda tidak akan berpikir ada banyak hal untuk ditambahkan di sini, tetapi mungkin inilah waktunya untuk cara terpadu melakukan ini di semua versi. Saya telah menggabungkan pendekatan kueri-registri (VS2015 dan di bawahnya) dengan penggunaan vswhere (VS2017 dan yang lebih baru) untuk menghasilkan ini:
sumber
Ada banyak jawaban yang benar. Namun, di sini One-Liner di PowerShell yang saya gunakan untuk menentukan jalur MSBuild untuk versi terbaru :
sumber
-last 1
(bukan-first 1
untuk mendapatkan versi terbaru) dan juga menggabungkan nama file (untuk mendapatkan path lengkap dengan benar dan tidak hanya foldernya).Metode PowerShell ini mendapatkan jalur ke msBuild dari berbagai sumber. Mencoba secara berurutan:
Pertama menggunakan vswhere (karena Visual Studio tampaknya memiliki versi msBuild yang lebih mutakhir) misalnya
Jika tidak ditemukan mencoba registri (versi kerangka kerja) mis
Kode Powershell:
sumber
Untuk Visual Studio 2017 tanpa mengetahui edisi yang tepat, Anda dapat menggunakan ini dalam skrip batch:
Perintah findstr adalah untuk mengabaikan executable msbuild tertentu (dalam contoh ini amd64).
sumber
tambahkan cabang vswhere untuk https://github.com/linqpadless/LinqPadless/blob/master/build.cmd , berfungsi dengan baik di komputer saya, dan cabang vswhere berfungsi di komputer teman saya. Mungkin, cabang vswhere harus bergerak maju sebagai cek pertama.
sumber
Dapatkan versi terbaru MsBuild. Cara terbaik, untuk semua jenis instalasi msbuild, untuk arsitektur prosesor yang berbeda (Power Shell):
sumber
Jika Anda berjiwa petualang, Anda juga bisa mendapatkan kode sumber dan rilis terbaru MsBuild dari GitHub sekarang di https://github.com/Microsoft/msbuild/releases/
sumber
Jika Anda ingin mengkompilasi proyek Delphi, lihat "ERROR MSB4040 Tidak ada target dalam proyek" saat menggunakan msbuild + Delphi2009
Jawaban yang benar ada yang berkata: "Ada file batch bernama rsvars.bat (cari di folder RAD Studio). Panggil itu sebelum memanggil MSBuild, dan itu akan mengatur variabel lingkungan yang diperlukan. Pastikan folder sudah benar di rsvars .bat jika Anda memiliki kompilator di lokasi yang berbeda dengan default. "
Kelelawar ini tidak hanya akan memperbarui variabel lingkungan PATH ke folder .NET yang tepat dengan versi MSBuild.exe yang tepat, tetapi juga mendaftarkan variabel lain yang diperlukan.
sumber