Howdy, saya mengalami sedikit masalah runnning skrip NAnt yang digunakan untuk membangun situs web .Net 2.0 saya dengan benar, ketika mengkompilasi dengan VS2008 dan itu terkait alat. Saya baru saja memutakhirkan semua file proyek / solusi ke VS2010, dan sekarang build saya gagal dengan kesalahan berikut:
[exec] C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (2249.9): kesalahan MSB3086: Tugas tidak dapat menemukan "sgen.exe" menggunakan S dkToolsPath "" atau registri kunci "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A". Pastikan SdkToolsPath diatur dan alat ada di lokasi spesifik prosesor yang benar di bawah SdkToolsPath dan bahwa Microsoft Windows SDK diinstal
Sekarang, saya punya versi sebelumnya (.Net 3.5) dari Windows SDK yang diinstal pada build server, dan kerangka kerja penuh .Net 4.0 diinstal, tapi saya belum menemukan versi tertentu .Net 4.0 dari Windows SDK.
Setelah sedikit percobaan dan penelitian, saya akhirnya hanya menset variabel lingkungan baru "SDKToolsPath" dan mengarahkannya ke salinan sgen.exe di folder windows 6.0 sdk saya. Ini menghasilkan kesalahan yang sama, tetapi membuat saya memperhatikan bahwa meskipun variabel lingkungan SDKToolsPath diatur (dikonfirmasi bahwa saya dapat "menggema" di baris perintah dan memiliki nilai yang diharapkan), pesan kesalahan tampaknya mengindikasikan bahwa itu adalah tidak sedang dibaca (perhatikan kutipan kosong).
Sebagian besar informasi yang saya temukan spesifik. Net 3.5 (atau lebih awal). Belum banyak 4.0 terkait di luar sana. Mencari kode kesalahan MSB3086 menghasilkan tidak ada yang berguna juga. Adakah yang tahu apa ini?
Scott
Jawaban:
Saya harus menggigit peluru dan menginstal VS 2010 di server build kami untuk memperbaiki masalah ini. Sejauh yang saya bisa lihat, tidak ada versi 7.0A dari Windows SDK yang tersedia di MSDN. Namun, menginstal VS 2010 tampaknya menginstalnya, membuat regkey 7.0A dan folder 7.0A di Program Files \ Microsoft SDKs \ Windows.
sumber
Saya tidak bisa menghadapi meletakkan Visual Studio di server build.
SDK v7.0A adalah SDK yang diinstal dengan Visual Studio 2010 (A menunjukkan ini adalah rilis VS). Sejak itu, versi yang lebih baru telah dirilis. Microsoft Windows SDK untuk Windows 7 dan .NET Framework AKA v7.1 .
Saya telah menginstal ini di server build saya. Dan kemudian melalui Prompt Perintah Windows SDK 7.1 (Mulai => Semua Program => Microsoft Windows SDK 7.1), saya mengatur versi standar SDK menjadi 7.1.
Langkah:
Sunting untuk memasukkan komentar LordHits: seseorang tidak perlu menginstal seluruh SDK. Menginstal hanya opsi .NET Development / Intellisense dan Reference Assemblies "dan" .NET Development / Tools "sudah cukup.
sumber
Cukup berikan parameter GenerateSerializationAssemblies dengan nilai Off ke MsBuild Anda.
sumber
Saya secara manual meneruskan variabel ke MSBuild di server build.
sumber
Saya mengalami masalah serupa baru-baru ini di server build kami.
Saya menyalin folder 7.0A (C: \ Program Files \ Microsoft SDKs Windows \ 7.0A) dari komputer saya (yang memiliki VS2010 diinstal) di atasnya ke server build di lokasi yang sama.
Setelah membuat kunci registri berikut: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A. Atur InstallationFolder ke C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A.
Anda juga dapat merujuk registri pada mesin Anda dengan VS2010 yang sudah diinstal di atasnya jika Anda bingung tentang apa yang harus dilakukan dengan registri pada server build.
sumber
Saya telah mengalami kesalahan yang sama tetapi dalam situasi yang berbeda: menggunakan VS 2010 Express dan mencoba menggunakan jawaban Simmo untuk secara eksplisit mengatur versi SDK - namun WindowsSdkVer.exe (tool setter versi) tampaknya tidak menargetkan Express (dapat dimengerti karena terbatas ).
Saya menggunakan VS 2010 Express pada Win 7 Prof. dan selalu ingin menggunakan v7.0A dari Win SDK (yang tidak memiliki semua ongkos yang diperlukan), dan tidak masalah versi mana yang secara eksplisit saya tetapkan sebagai arus menggunakan WindowsSdkVer.exe (Ini terus melaporkannya mengatur versi SDK saat ini tetapi untuk VS 2008 meskipun meskipun saya hanya menginstal 2010 Ex.)
Jadi solusi murah saya adalah menginstal v7.0 WIN SDK (atau versi lain seperti v7.1) dan kemudian mengganti nama folder sistem file menjadi v7.0A - pada dasarnya saya hanya berbohong ke VS 2010 Express tetapi berfungsi sekarang!
sumber
Salah satu proyek Anda menggunakan sgen.exe (Server Generator) untuk menghasilkan layanan web. Anda perlu menginstal SDK untuk Membangun Server atau menghapus referensi Layanan Web dari proyek.
sumber
Saya menduga file target mengesampingkan jalur alat, saya melihat sekilas dalam file ini dan menetapkan SDKToolsPath ke $ TargetFrameworkSDKToolsDirectory di bawah beberapa target di sana. Saya tidak berpikir Anda harus mengatur ini di lingkungan, tetapi mereka mungkin perlu memperbaiki dalam file proyek Anda.
Perhatikan bahwa menurut halaman ini http://nant.sourceforge.net/ Nant tidak mendukung .Net 4.0, dapatkah ini menjadi masalah sebenarnya?
Maaf, saya tahu ini tidak benar-benar menjawab pertanyaan Anda :(
sumber
Saya memiliki masalah yang sama pada mesin Windows 10 baru. Pengaturan saya:
Tapi saya tidak bisa membangun proyek .NET 4.0:
Die Aufgabe konnte "AL.exe" dari dem SdkToolsPath-Wert "" atau dari Registrierungsschlüssel "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86
Solusi: Setelah mencoba (dan gagal) untuk menginstal Windows 7 SDK (karena itu juga termasuk .NET 4.0 SDK) saya perlu menginstal Windows 8 SDK dan memastikan ".NET Framework 4.5 SDK" diinstal.
Ini gila ... tapi berhasil.
sumber
Anda sebenarnya tidak menginstal SDK versi 7.0A? Itu masalah yang harus Anda perbaiki. Lihat di VS2010 instal file log untuk melihat apa yang salah. SDK harus ada di c: \ program files \ microsoft sdks \ windows \ 7.0a dan kunci registri yang terdaftar harus ada juga. Menjalankan dengan versi 6.0a dari sgen.exe tidak baik, itu pasti akan menggunakan kompiler yang salah.
sumber
Tetapkan
Sdk40ToolsPath
daripadaSdkToolsPath
menetapkan lokasi selain direktori instal.Saya mengalami masalah yang sama dengan AL.exe karena saya baru saja xcopied alat ke mesin build daripada menginstal SDK, jadi kunci registri yang biasa hilang. Saya menjalankan build dengan output diagnostik (/ verbosity: diagnostik) dan memperhatikan bahwa ada beberapa jalur alat SDK yang didefinisikan: Sdk40ToolsPath, Sdk35ToolsPath, dan SdkToolsPath. Pengaturan Sdk40ToolsPath untuk menunjuk ke folder bin versi SDK yang tepat memecahkan masalah bagi saya.
sumber
Saya setuju dengan jawaban IanS. Tidak perlu menginstal SDK baru. Pastikan nilai kunci registri SDK35ToolsPath dan SDK40ToolPath untuk MSBuild menunjuk ke memperbaiki nilai kunci registri.
Dalam kasus saya, proyek saya ditargetkan untuk .NET 3.5 dan saya harus menetapkan SDK35ToolsPath untuk kunci HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 to $ (Registry: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v6.0A \ WinSDKNetFxTools @ InstallationFolder). Dan semuanya berhasil.
sumber
Kami memiliki PC winXP build, dan menggunakan Visual Build Pro 6 untuk membangun perangkat lunak kami. karena beberapa pengembang kami menggunakan VS 2010 file proyek sekarang berisi referensi ke "alat versi 4.0" dan dari apa yang saya tahu, ini memberitahu Visual Build itu perlu menemukan sdk7.x di suatu tempat, meskipun kami hanya membangun untuk .NET 3.5 . Ini menyebabkannya tidak menemukan lc.exe. Saya mencoba membodohinya dengan mengarahkan semua makro ke 6.0A SDK yang datang dengan VS2008 yang diinstal pada pc, tetapi itu tidak berhasil.
Saya akhirnya berhasil dengan mengunduh dan menginstal SDK 7.1. Saya kemudian membuat kunci registri untuk 7.0A dan mengarahkan jalur instal ke jalur instal 7,1 SDK. sekarang dengan senang hati menemukan "lc.exe" yang kompatibel dan semua kode dapat dikompilasi dengan baik. Saya merasa sekarang saya juga dapat mengkompilasi kode .NET 4.0 meskipun VS2010 tidak diinstal, tetapi saya belum mencobanya.
sumber
ToolsVersion = "4.0" melakukannya untuk saya dalam proyek MSBuild saya:
sumber
Pertama-tama pastikan bahwa Anda sudah mengunduh dotNetFx40_Full_x86_x64.exe dan diinstal (Ini umumnya mengikat dengan Visual Stdio).
Kemudian dengan cepat mengatur Variabel Lingkungan baru pada variabel Sistem. seperti di bawah ini:
"TargetFrameworkSDKToolsDirectory":"C:\Program Files (x86)\Microsoft SDKs\Windows\vxx.0A\bin\NETFX 4.6.1 Tools" //note:the path:'\vxx.0A\' is a variable indicating your version. it's '\v10.0A\' for me.
sumber
Saya memiliki masalah yang sama dan telah menginstal Windows SDK 7.0 dan Windows SDK 7.1 yang tidak memperbaiki masalah ini. Penyebab masalah bagi saya adalah bahwa perpustakaan kelas yang menyinggung dibangun dengan Target Framework .NET Framework 2.0.
Saya mengubahnya ke .NET Framework 4.0 dan bekerja secara lokal dan ketika diperiksa di server Bangun berhasil.
sumber
Saya punya masalah serupa, terutama msbuild gagal: MSB3086, MSB3091: "AL.exe", "resgen.exe" tidak ditemukan
Pada mesin Windows 7 64 bit, saya menginstal .Net framework 4.5.1 dan Windows SDK untuk Windows 8.1.
Meskipun pengaturan untuk SDK mengatakan bahwa itu sudah terbaru, mungkin tidak. Saya memecahkan masalah dengan menghapus semua versi SDK yang diinstal, kemudian menginstal berikut ini, dalam urutan ini:
http://www.microsoft.com/en-us/download/details.aspx?id=3138
http://www.microsoft.com/en-us/download/details.aspx?id=8279
http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx
http://msdn.microsoft.com/en-us/windows/desktop/aa904949.aspx
sumber
Jawaban singkat: Di file .csproj, ada cara untuk menentukan path ke sgen.exe, menggunakan SGenToolPath:
Jalur Anda mungkin berbeda, tetapi SGenToolPath adalah yang Anda inginkan.
Untuk daftar properti Proyek MSBuild umum lainnya, lihat: https://msdn.microsoft.com/en-us/library/bb629394.aspx
Kami akhirnya menggunakan pengaturan SGenToolPath ini dalam file .csproj, alih-alih mengedit nilai registri pada server build. Mengedit nilai registri pada mesin lokal saya juga berfungsi, tetapi sedikit lebih rumit dan kami tidak ingin mengacaukan registri pada server build.
Untuk registri: Dalam kasus ini masalahnya adalah bahwa SDK40ToolsPath (s) di bawah HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild menunjuk ke nilai registri $ (Registri: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86 @ InstallationFolder) yang tidak ada. Saya hanya menggantinya dengan jalur sebenarnya secara langsung.
sumber
Saya juga mengalami masalah ini ketika mencoba membangun plugin menggunakan Visual Studio 2017 di komputer tempat kerja saya yang berantakan. Jika Anda mencari di internet untuk "tidak dapat menemukan resgen.exe," Anda dapat menemukan semua saran ini seperti ' cukup gunakan regedit untuk mengedit Windows Registry Anda dan buat kunci baru di sini dan salin dan rekatkan isi folder ini ke dalam folder lain ini, bla bla bla. '
Saya menghabiskan berminggu-minggu hanya mengacaukan Registry Windows saya dengan regedit, mungkin menambahkan selusin sub-kunci dan copy-paste ResGen.exe ke banyak direktori yang berbeda, kadang-kadang meletakkannya di folder 'bin', kadang-kadang hanya menyimpannya di folder utama, dll.
Pada akhirnya, saya menyadari, "Hei, jika Visual Studio memberikan pesan kesalahan yang lebih terperinci, semua ini tidak akan menjadi masalah." Jadi, untuk mendapatkan rincian lebih lanjut tentang kesalahan, saya menjalankan MSBuild.exe langsung pada file * .csproj saya dari baris perintah:
Tentu saja, Anda harus mengubah detail path agar sesuai dengan situasi Anda, tetapi pastikan untuk meletakkan 1) path lengkap ke MSBuild.exe 2) path lengkap ke file * .csproj Anda 3) thefl-flp: logfile = bagian, yang akan memberitahu MSBuild untuk membuat file log dari setiap langkah yang diambil dalam proses, 4) lokasi Anda ingin file * .log disimpan dan 5); verbosity = diagnostik, yang pada dasarnya hanya memberitahu MSBuild untuk memasukkan BANYAK detail dalam file * .log.
Setelah Anda melakukan ini, build akan gagal seperti biasa, tetapi Anda akan dibiarkan dengan file * .log yang menunjukkan dengan tepat di mana MSBuild mencari file ResGen.exe Anda. Dalam kasus saya, di dekat bagian bawah file * .log, saya menemukan:
Jadi pada dasarnya, MSBuild mencari di lima direktori terpisah untuk ResGen.exe, lalu menyerah. Ini adalah jenis perincian yang tidak bisa Anda dapatkan dari pesan galat Visual Studio, dan ini memecahkan masalahnya: cukup gunakan regedit untuk membuat kunci untuk salah satu dari lima lokasi tersebut , dan letakkan nilai "InstallationFolder" di kunci , yang akan menunjuk ke folder tempat ResGen.exe Anda berada (dalam kasus saya itu adalah "C: \ Program Files \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.2 Tools").
Jika Anda seorang humaniora besar seperti saya tanpa latar belakang di komputer, Anda mungkin tergoda untuk hanya mengedit heck keluar dari Windows Registry Anda dan salin-tempel ResGen.exe di semua tempat ketika dihadapkan dengan kesalahan seperti ini (yang merupakan tentu saja, praktik buruk). Lebih baik mengikuti prosedur yang diuraikan di atas: 1) Jalankan MSBuild.exe langsung pada file * .csproj Anda untuk mengetahui lokasi persisnya MSBuild mencari ResGen.exe lalu 2) edit Windows Registry Anda secara tepat sehingga MSBuild dapat menemukan ResGen. exe.
sumber
Saya memperbaikinya dengan meneruskan ini sebagai parameter baris perintah ke msbuild.exe:
Jarak tempuh Anda akan bervariasi tergantung pada versi SDK yang Anda miliki di sistem Anda
sumber
Selain mod registri, Anda mungkin perlu mengubah versi .net SDK pengaturan Anda diatur ke dalam Visual Studio.
Saya mengalami masalah ini dan memutuskan untuk memeriksa pengaturan debug proyek.
Project => Properties Toolbar => Tombol Opsi Kompilasi Debug
Kerangka Target (semua konfigurasi) diatur ke 3.0 yang tidak ada di sistem saya.
Saya mengubahnya menjadi 4.0, kemudian harus memulai ulang proyek dan Visual Studio 2010.
Proyek kemudian dibangun tanpa kesalahan dan dijalankan.
sumber
Saya punya masalah serupa. Saya telah melakukan proyek menggunakan
Visual Studio 2010
dan kemudian mendapatkan kesalahan di atas ketika saya mengkompilasinya menggunakanVisual Studio 2012
. Saya sederhana menyalin semua isiC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A
ke dalamC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A
dan yang memecahkan masalah saya.sumber
Saya baru saja mengalami kesalahan ini dengan file .sln yang awalnya dibuat di Visual Studio 2010 (dan sedang dibangun oleh Visual Studio 2010 dan TFS 2010). Saya telah memodifikasi file solusi untuk TIDAK membangun proyek yang tidak seharusnya dibangun dalam konfigurasi tertentu dan studio visual mengubah header file solusi dari:
Untuk:
Mengaturnya kembali ke versi 2010 asli memperbaiki masalah saya. Saya kira kompatibilitas mundur di Visual Studio masih belum disempurnakan.
sumber
coba gunakan "perbaikan" visual studio. Ini berhasil untuk saya.
sumber
Pembungkus CMD
Saya sudah mencoba semua barang dari sini dan bahkan lebih. Tidak ada yang membantu saya.
Saya menerapkan pembungkus CMD untuk MSBuild dan DevEnv.com.
Gagasan utama di dalam pembungkus tersebut adalah untuk membuat lingkungan yang dipersiapkan dengan memanggil Command Prompts dari pasokan Visual Studio. Dan kemudian meneruskan parameter input standar ke panggilan MSBuild atau DevEnv.com.
Bagaimanapun, pada server-build saya sekarang saya dapat membangun proyek dari berbagai versi Visual Studio.
Bagaimana cara menggunakan
saya harus mengganti panggilan ke MSBuild dan DevEnv dengan panggilan ke pembungkus file batch saya.
Dan saya tidak mengubah parameter input apa pun. Sebagai contoh untuk panggilan bungkus MSBuild saya:
MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release
Solusi siap.
Sebenarnya, saya mendapat lebih banyak masalah dengan migrasi dari VS 2010 ke VS 2015. Tapi yang ini adalah yang pertama dan yang paling sulit.
Jadi, resep penyelamatan sederhana saya untuk Build Server ada di sini. Mungkin sulit untuk memahami semua gaya CMD ini di sana dari saat pertama tetapi logika apa pun jelas, saya harap.
Petunjuk
Ada
MSBuild Command Prompt for Visual Studio
danDeveloper Command Prompt for Visual Studio
saya menggunakannya secara tepat untuk MSBuild dan DevEnv.com. Tapi mungkin Prompt Perintah MSBuild akan cukup.
Untuk VS 2015 prompt perintah tersebut ada di sini
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
. Atau lihat melalui menu program Windows.Untuk meneruskan semua parameter input ke MSBuild atau DevEnv di dalam file batch yang saya gunakan
CALL MSBuild %*
sumber