Menjalankan MSBuild gagal membaca SDKToolsPath

130

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

Scott Mayfield
sumber
Masalah terkait dalam posting ini. Saya mengirim jawaban di sana juga. stackoverflow.com/questions/1109955/…
Diego C.

Jawaban:

15

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.

John Hann
sumber
9
Saya lebih suka tidak menginstal Visual Studio 2010 di server. Saya lebih suka saran Simmo di bawah tentang pengaturan SDK Windows saat ini ke v7.1. WindowsSdkVer.exe terletak di C: \ Program Files \ Microsoft SDKs Windows \ v7.1 \ Setup (dengan asumsi itu diinstal ke C: \ Program Files).
Philippe
55
Saya telah menemukan bahwa jika Anda hanya menginstal Windows SDK 7.1 dan .NET 4.0. MSBuild tidak menetapkan jalur yang benar ke SDK40ToolsPath dan SDK35ToolsPath. Untuk memperbaikinya, saya harus mengubah beberapa entri di HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0: "SDK40ToolsPath" = "$ (Registri: HKEY_LOCAL_MACHINE \\ SOFTWARE \\ SOFTWARE \\ Microsoft \\ Microsoft SDKs \\ Windows \\ v7 .1 \\ WinSDK-NetFx40Tools-x86 @ InstallationFolder) "Demikian pula ubah" v7.0A "menjadi" v7.1 "di SDK35ToolsPath dan FrameworkSDKRoot.
BlueMonkMN
7
Sheesh - Saya sendiri mengalami masalah yang sama, mencari di Google untuk itu dan menemukan jawaban sendiri! :) Sesuatu sepertinya telah mengatur ulang perubahan saya dan saya kira saya harus menerapkannya lagi secara manual.
BlueMonkMN
3
ARRRGH! .NET 4.0 patches terbaru (2011-08-11) menimpa pengaturan registri ini!
si618
8
Perbarui respons saya sebelumnya. Tampaknya pada OS 64-bit, mungkin juga diperlukan untuk memperbarui nilai yang serupa di HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0, dan mungkin perlu menginstal 8.0 SDK atau memperbarui nilai dalam HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 dan HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 Saya melakukan semua hal di atas kecuali menginstal 8.0 SDK, dan tidak dapat mengkompilasi sampai saya (sebagai satu batch) langkah) termasuk pembaruan saya ke semua 4.0 \ 11.0 node.
BlueMonkMN
227

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:

cd Setup

WindowsSdkVer.exe -version:v7.1

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.

Simmo
sumber
4
Ini bekerja dengan baik untuk saya, dikombinasikan dengan menyalin seluruh file ke C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebAplikasi dari mesin VS saya.
dnolan
1
Saya menghadapi masalah yang sama dengan penulis asli dan jawaban ini menyelesaikannya! Saya tidak perlu menginstal Visual Studio 2010 di mesin Build saya.
SolutionYogi
37
Juga, hanya untuk memperjelas, seseorang tidak perlu menginstal seluruh SDK. Menginstal hanya opsi .NET Development / Intellisense dan Reference Assemblies "dan" .NET Development / Tools "sudah cukup. Ini dan menyalin file dari komentar dnolan.
LordHits
Terima kasih atas solusi ini, ini bekerja dengan baik untuk saya di server build kami! FYI- untuk siapa saja yang mungkin bertanya, build server adalah Windows Server 2008 x64.
Adam Weber
Terima kasih banyak atas jawaban ini; mengalami masalah yang sama di tempat kerja dengan ini juga.
Abe
20

Cukup berikan parameter GenerateSerializationAssemblies dengan nilai Off ke MsBuild Anda.

msbuild.exe /p:GenerateSerializationAssemblies=Off
Daniel
sumber
7
msbuild.exe / p: GenerateSerializationAssemblies = Mati
Daniel
2
Atau atur "Hasilkan unitisasi serialisasi: Mati" di tab Bangun properti proyek layanan web.
samneric
6
Apa tepatnya yang dilakukan ini?
naksir
1
GOTCHA: Jika Anda mematikannya di tab build, pastikan Anda melakukan ini untuk konfigurasi build yang relevan, (DropDown di atas tab Build) dalam kasus saya itu hanya server build yang bermasalah, jadi saya harus ubah ini dalam konfigurasi 'Lepaskan'.
Myster
14
Saya suka hanya mengganti flag build secara acak tanpa tahu apa yang sebenarnya mereka lakukan.
AaronLS
14

Saya secara manual meneruskan variabel ke MSBuild di server build.

msbuild.exe MyProject.csproj "/p:TargetFrameworkSDKToolsDirectory=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools" "/p:AspnetMergePath=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"
Der_Meister
sumber
1
Inilah yang akhirnya saya lakukan untuk Windows 10 SDK di server tanpa Visual Studio dan Alat Bangun 2019. Tak satu pun dari solusi lain yang tampaknya membantu dan yang ini melakukan trik dengan cara yang bersih.
Nicolás Fantone
8

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.

brandogs
sumber
Bagi saya, jawaban Simmo tidak berhasil - peretasan registri ini berhasil (Menangkan 2K3 SP2).
FinnNk
7

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!

John K.
sumber
5

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.

Maer007
sumber
1
Atau atur "Hasilkan unitisasi serialisasi: Mati" di tab Bangun properti proyek layanan web.
samneric
1
GOTCHA: Jika Anda mematikannya di tab build, pastikan Anda melakukan ini untuk konfigurasi build yang relevan, (DropDown di atas tab Build) dalam kasus saya itu hanya server build yang bermasalah, jadi saya harus ubah ini dalam konfigurasi 'Lepaskan'.
Myster
4

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 :(

Steve
sumber
Benar, NAnt belum mendukung format file proyek / solusi untuk VS2010, itulah sebabnya saya memanggil MSBuild untuk langkah kompilasi yang sebenarnya. Akan memeriksa file target.
Scott Mayfield
4

Saya memiliki masalah yang sama pada mesin Windows 10 baru. Pengaturan saya:

  • Windows 10
  • Visual Studio 2015 Terpasang
  • Windows 10 SDK

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.

Robert Muehsig
sumber
Ini justru membantu saya di Windows 10 juga.
bourbert
3

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.

Hans Passant
sumber
1
Ingat, ini adalah server build, jadi menginstal lingkungan VS2010 lengkap bukan pilihan pertama saya. Saya tidak dapat menemukan unduhan Windows SDK 7.0a yang tersedia
Scott Mayfield
3
Saya tidak melihat masalah. Menjalankan build di mesin yang konfigurasinya tidak cocok dengan mesin dev, itu masalah yang akan membuat Anda cepat lelah.
Hans Passant
3

Tetapkan Sdk40ToolsPathdaripada SdkToolsPathmenetapkan 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.

Ian
sumber
Di mana Anda mengatur Sdk40ToolsPath?
Michael Freidgeim
Saya akan berasumsi bahwa itu perlu ditambahkan ke jalur lingkungan. Namun, itu tidak berhasil untuk saya.
Timothy Lee Russell
Maaf ini sudah lama saya lupa rinciannya, tapi saya pikir itu adalah variabel lingkungan atau ditetapkan dalam file proyek MSBuild. Perhatikan juga bahwa pertanyaan awal terkait dengan .NET Framework 4.0 / VS2010 tetapi variabel yang berbeda mungkin diperlukan untuk versi kerangka kerja yang lebih baru.
IanS
2

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.

Anna
sumber
2

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.

Herbie Marais
sumber
2

ToolsVersion = "4.0" melakukannya untuk saya dalam proyek MSBuild saya:

<Project DefaultTargets="Do" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
AlexeiOst
sumber
Nah, dalam kasus saya, saya menggunakan ToolsVersion = "14.0" untuk VS 2015 dan ini memecahkan masalah
AndrewSilver
2

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.

TommyWhite
sumber
Ini sedang memecahkan masalah. Sekedar petunjuk jika ada orang yang memiliki masalah yang sama dengan saya. Variabel Env perlu disebut TargetFrameworkSDKToolsDirectory dan bukan SdkToolsPath !!!
Markus
1

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.

Rob Bramhall
sumber
1

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

Starnuto di topo
sumber
1

Jawaban singkat: Di file .csproj, ada cara untuk menentukan path ke sgen.exe, menggunakan SGenToolPath:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
  <PropertyGroup>
    <SGenToolPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools</SGenToolPath>
  </PropertyGroup>

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.

TomEberhard
sumber
1

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:

 "C:/Windows/Microsoft.NET/Framework/v4.0.3.0319/MSBuild.exe C:/Users/Todd/Plugin.csproj -fl -flp:logfile="C:/Users/Todd/Desktop/error_log.log";verbosity=diagnostic"

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:

Compiling plug-in resources (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.2\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6.1\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\NETFXSDK\4.6\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.1a\WinSDK-NetFx40Tools-x86 (Task ID:41)
Looking in key SOFTWARE\WOW6432Node\Microsoft\Microsoft SDKs\Windows\v8.0a\WinSDK-NetFx40Tools-x86 (Task ID:41)
MSBUILD: error : Failed to locate ResGen.exe and unable to compile plug-in resource file "C:/Users/Todd/PluginResources.resx"

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.

todbott
sumber
Saya mencoba ini tetapi karena alasan tertentu saya tidak mendapatkan daftar jalur yang Anda tampilkan. Saya menemukan posting yang serupa dengan milik Anda di situs ini: community.sdl.com/developers-more/developers/… jadi saya tahu bahwa itu harus bekerja, tetapi tidak berhasil. MSBuild versi apa yang Anda gunakan?
user11809641
Sepertinya saya menggunakan MSBuild versi 4.0.30319. Saya juga menginstal versi 3.5, 3.0, dan 2.0.50727 di komputer ini. Saya mencoba menjalankan versi MSBuild pada file * .csproj saya (dengan cara yang sama seperti diuraikan di atas), tetapi tidak berhasil ... bahkan tidak membuat file * .log. /// Ketika Anda menjalankan MSBuild pada file * .csproj Anda, apakah komputer setidaknya menghasilkan file * log? Pemahaman saya adalah bahwa ada file log, hanya saja tidak ada informasi spesifik mengenai jalur yang dicari ketika mencari ResGen.exe - apakah itu benar?
todbott
Sepertinya saya memiliki versi yang sama dari MSBuild (4.0.30319). Dan ya, Anda benar. Saya mendapatkan file log, tetapi tidak memberikan informasi tentang jalur Registry. Manakah dari lima jalur yang Anda posting di atas yang akhirnya Anda gunakan?
user11809641
Saya menggunakan jalur 1 pada daftar - baru saja menambahkan "InstallationFolder" di SOFTWARE kunci \ WOW6432Node \ Microsoft \ Microsoft SDKs \ NETFXSDK \ 4.6.2 \ WinSDK-NetFx40Tools-x86. Juga, file * .log sebenarnya sangat panjang - ribuan baris, dalam kasus saya. Saya tidak dapat menemukan informasi jalur dengan mata telanjang saya. Saya akhirnya membuka file * .log di Notepad dan mencari "ResGen.exe," yang membawa area terkait (informasi jalur) menjadi perhatian saya.
todbott
1
Super - selamat! Anda telah menjadi salah satu dari segelintir orang (beberapa ratus, saya kira) yang telah berjuang melalui kesalahan dan misteri dan benar-benar berhasil menyusun plugin untuk Trados. Semoga berhasil dengan penerbitan plugin Anda, sampai jumpa di SDL Appstore!
todbott
1

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

/p:TargetFrameworkSDKToolsDirectory="C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools
BraveNewMath
sumber
0

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.

Scott Tovey
sumber
Saya membuat kesalahan itu menemukan di berikut ini. Project => Properti Toolbar => Kompilasi Maju Tombol Opsi Kompilasi Saya juga membuat proyek baru dan .net proyek baru diatur ke 3.0. Jadi akan ada kebutuhan untuk mengubah pengaturan default juga. Scott A. Tovey
Scott Tovey
Saya menemukan bahwa ketika Anda membuat proyek, di bagian atas jendela ada daftar drop-down semua kerangka kerja. Semuanya terdaftar terlepas dari apakah itu diinstal atau tidak. Setelah Anda memilih kerangka kerja dan membuat proyek dari daftar itu, itu tetap default sampai Anda mengubahnya ke kerangka kerja lain untuk proyek baru. Ini agak sembrono, daftar ini hanya boleh berisi kerangka kerja yang diinstal pada sistem.
Scott Tovey
0

Saya punya masalah serupa. Saya telah melakukan proyek menggunakan Visual Studio 2010dan kemudian mendapatkan kesalahan di atas ketika saya mengkompilasinya menggunakan Visual Studio 2012. Saya sederhana menyalin semua isi C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0Ake dalam C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0Adan yang memecahkan masalah saya.

Leo Rams
sumber
3
Saya berharap ada suara untuk solusi terburuk dunia. Ini dia.
jonypony3
0

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:

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010

Untuk:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1

Mengaturnya kembali ke versi 2010 asli memperbaiki masalah saya. Saya kira kompatibilitas mundur di Visual Studio masih belum disempurnakan.

Mike Cheel
sumber
0

coba gunakan "perbaikan" visual studio. Ini berhasil untuk saya.

Shirli
sumber
0

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 Studiodan Developer 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 %*

it3xl
sumber