การรัน MSBuild ล้มเหลวในการอ่าน SDKToolsPath


130

Howdy ฉันมีปัญหาเล็กน้อยในการรันสคริปต์ NAnt ที่ใช้ในการสร้างเว็บไซต์ที่ใช้. Net 2.0 ของฉันอย่างถูกต้องเมื่อรวบรวมกับ VS2008 และเป็นเครื่องมือที่เกี่ยวข้อง ฉันเพิ่งอัปเกรดไฟล์โครงการ / โซลูชันทั้งหมดเป็น VS2010 และตอนนี้บิลด์ของฉันล้มเหลวโดยมีข้อผิดพลาดต่อไปนี้:

[exec] C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (2249,9): ข้อผิดพลาด MSB3086: งานไม่พบ "sgen.exe" โดยใช้ S dkToolsPath "" หรือรีจิสทรี คีย์ "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A" ตรวจสอบให้แน่ใจว่าได้ตั้งค่า SdkToolsPath และมีเครื่องมืออยู่ในตำแหน่งเฉพาะของโปรเซสเซอร์ที่ถูกต้องภายใต้ SdkToolsPath และติดตั้ง Microsoft Windows SDK แล้ว

ตอนนี้ฉันมี Windows SDK เวอร์ชันก่อนหน้า (.Net 3.5) ติดตั้งอยู่บนเซิร์ฟเวอร์บิลด์และติดตั้งเฟรมเวิร์ก. Net 4.0 แบบเต็มแล้ว แต่ฉันไม่ได้ใช้ Windows SDK เวอร์ชันเฉพาะของ. Net 4.0

หลังจากการทดลองและการวิจัยเล็กน้อยในที่สุดฉันก็ตั้งค่าตัวแปรสภาพแวดล้อมใหม่ "SDKToolsPath" และชี้ไปที่สำเนาของ sgen.exe ในโฟลเดอร์ sdk windows 6.0 ของฉัน สิ่งนี้ทำให้เกิดข้อผิดพลาดเดียวกัน แต่ทำให้ฉันสังเกตเห็นว่าแม้ว่าจะตั้งค่าตัวแปรสภาพแวดล้อม SDKToolsPath IS (ยืนยันว่าฉันสามารถ "สะท้อน" ได้ที่บรรทัดคำสั่งและมีค่าที่คาดไว้) ข้อความแสดงข้อผิดพลาดดูเหมือนจะระบุว่าเป็น ไม่ได้อ่าน (สังเกตคำพูดที่ว่างเปล่า)

ข้อมูลส่วนใหญ่ที่ฉันพบคือ. Net 3.5 (หรือรุ่นก่อนหน้า) โดยเฉพาะ 4.0 ที่เกี่ยวข้องยังไม่มากนัก การค้นหารหัสข้อผิดพลาด MSB3086 ไม่ได้สร้างประโยชน์อะไรเลย มีความคิดว่าสิ่งนี้อาจเป็นอย่างไร

สกอตต์


ปัญหาที่เกี่ยวข้องในโพสต์นี้ ฉันโพสต์คำตอบที่นั่นเช่นกัน stackoverflow.com/questions/1109955/…
Diego C.

คำตอบ:


15

ฉันต้องกัดกระสุนและติดตั้ง VS 2010 บนเซิร์ฟเวอร์สร้างของเราเพื่อแก้ไขปัญหานี้ เท่าที่ฉันเห็นไม่มี Windows SDK เวอร์ชัน 7.0A พร้อมใช้งานที่ใดก็ได้บน MSDN อย่างไรก็ตามการติดตั้ง VS 2010 ดูเหมือนจะติดตั้งโดยสร้าง Regkey 7.0A และโฟลเดอร์ 7.0A ใน Program Files \ Microsoft SDKs \ Windows


9
ฉันไม่ต้องการติดตั้ง Visual Studio 2010 บนเซิร์ฟเวอร์ ฉันชอบคำแนะนำของ Simmo ด้านล่างในการตั้งค่า Windows SDK ปัจจุบันเป็น v7.1 WindowsSdkVer.exe อยู่ใน C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Setup (สมมติว่าติดตั้งไว้ใน C: \ Program Files)
Philippe

55
ฉันพบว่าถ้าคุณติดตั้ง Windows SDK 7.1 และ. NET 4.0 เท่านั้น MSBuild ไม่ได้กำหนดเส้นทางที่เหมาะสมไปยัง SDK40ToolsPath และ SDK35ToolsPath ในการแก้ไขฉันต้องเปลี่ยนบางรายการใน HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0: "SDK40ToolsPath" = "$ (Registry: HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Microsoft SDKs \\ Windows \\ v7 .1 \\ WinSDK-NetFx40Tools-x86 @ InstallationFolder) "ในทำนองเดียวกันเปลี่ยน" v7.0A "เป็น" v7.1 "ใน SDK35ToolsPath และ FrameworkSDKRoot
BlueMonkMN

7
Sheesh - ฉันเจอปัญหาเดิมอีกครั้ง googled มันและพบคำตอบของตัวเอง! :) ดูเหมือนว่ามีบางอย่างรีเซ็ตการเปลี่ยนแปลงของฉันและฉันคิดว่าฉันต้องใช้อีกครั้งด้วยตนเอง
BlueMonkMN

3
ARRRGH! แพตช์. NET 4.0 ล่าสุด (2011-08-11) เขียนทับการตั้งค่ารีจิสทรีเหล่านี้!
si618

8
อัปเดตการตอบกลับก่อนหน้านี้ของฉัน ดูเหมือนว่าบนระบบปฏิบัติการ 64 บิตอาจจำเป็นต้องอัปเดตค่าที่คล้ายกันใน HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 และอาจจำเป็นต้องติดตั้ง 8.0 SDK หรืออัปเดตค่าใน HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 และ HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 ฉันทำทุกอย่างข้างต้นยกเว้นการติดตั้ง 8.0 SDK และไม่สามารถรวบรวมจนกว่าฉัน (เป็นชุดเดียว ขั้นตอน) รวมการอัปเดตของฉันไปยังโหนด 4.0 \ 11.0 ทั้งหมด
BlueMonkMN

227

ฉันไม่สามารถเผชิญกับการวาง Visual Studio บนเซิร์ฟเวอร์บิลด์

SDK v7.0A คือ SDK ที่ติดตั้งด้วย Visual Studio 2010 (A ระบุว่านี่คือรุ่น VS) ตั้งแต่นั้นมาก็มีการเผยแพร่เวอร์ชันที่ใหม่กว่า Microsoft Windows SDK สำหรับWindows 7 และ .NET Framework AKA v7.1

ฉันได้ติดตั้งสิ่งนี้บนเซิร์ฟเวอร์การสร้างของฉัน จากนั้นผ่านพรอมต์คำสั่ง Windows SDK 7.1 (Start => All Programs => Microsoft Windows SDK 7.1) ฉันตั้งค่าเวอร์ชันเริ่มต้นของ SDK เป็น 7.1

ขั้นตอน:

cd Setup

WindowsSdkVer.exe -version:v7.1

แก้ไขเพื่อรวมความคิดเห็นของ LordHits:เราไม่จำเป็นต้องติดตั้ง SDK ทั้งหมด การติดตั้งแค่ตัวเลือก ".NET Development / Intellisense and Reference Assemblies" และ ".NET Development / Tools" ก็เพียงพอแล้ว


4
สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันรวมกับการคัดลอกไฟล์ไปยัง C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications จากเครื่อง VS ของฉัน
dnolan

1
ฉันประสบปัญหาเดียวกันกับผู้เขียนต้นฉบับและคำตอบนี้แก้ไขได้! ฉันไม่ต้องติดตั้ง Visual Studio 2010 บนเครื่อง Build ของฉัน
SolutionYogi

37
นอกจากนี้เพื่อชี้แจงเราไม่จำเป็นต้องติดตั้ง SDK ทั้งหมด การติดตั้งแค่ตัวเลือก ".NET Development / Intellisense and Reference Assemblies" และ ".NET Development / Tools" ก็เพียงพอแล้ว สิ่งนี้และคัดลอกไฟล์จากความคิดเห็นของ dnolan
LordHits

ขอบคุณสำหรับวิธีแก้ปัญหานี้มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันบนเซิร์ฟเวอร์สร้างของเรา! FYI- สำหรับใครก็ตามที่อาจกำลังสงสัยเซิร์ฟเวอร์ build คือ Windows Server 2008 x64
Adam Weber

ขอบคุณมากสำหรับคำตอบนี้ พบปัญหาเดียวกันในที่ทำงานด้วยเช่นกัน
Abe

20

เพียงส่งพารามิเตอร์ GenerateSerializationAssemblies ที่มีค่า Off ไปยัง MsBuild ของคุณ

msbuild.exe /p:GenerateSerializationAssemblies=Off

7
msbuild.exe / p: GenerateSerializationAssemblies = ปิด
Daniel

2
หรือตั้งค่า "Generate serialization assembly: Off" ในแท็บ Build ของคุณสมบัติโปรเจ็กต์ของบริการเว็บ
samneric

6
สิ่งนี้ทำอะไรกันแน่?
ขยี้

1
GOTCHA: ถ้าคุณปิดบนแท็บบิลด์ตรวจสอบให้แน่ใจว่าคุณทำสิ่งนี้สำหรับการกำหนดค่าบิลด์ที่เกี่ยวข้อง (ดร็อปดาวน์ที่ด้านบนของแท็บบิลด์) ในกรณีของฉันมันเป็นเพียงเซิร์ฟเวอร์บิลด์ที่มีปัญหาดังนั้นฉันจึงต้อง เปลี่ยนสิ่งนี้ในการกำหนดค่า "รุ่น"
Myster

14
ฉันชอบแค่การสลับแฟล็กบิลด์แบบสุ่มโดยไม่รู้ว่ามันทำอะไร
AaronLS

14

ฉันส่งตัวแปรไปยัง MSBuild ด้วยตนเองบนบิลด์เซิร์ฟเวอร์

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"

1
นี่คือสิ่งที่ฉันทำกับ Windows 10 SDK ในเซิร์ฟเวอร์ที่ไม่มี Visual Studio และ Build Tools 2019 ดูเหมือนว่าโซลูชันอื่น ๆ จะช่วยไม่ได้และวิธีนี้ก็ทำเคล็ดลับได้อย่างหมดจด
Nicolás Fantone

8

ฉันพบปัญหาที่คล้ายกันเมื่อไม่นานมานี้บนเซิร์ฟเวอร์การสร้างของเรา

ฉันคัดลอกโฟลเดอร์ 7.0A (C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A) จากคอมพิวเตอร์ของฉัน (ซึ่งติดตั้ง VS2010) บนมันไปยังบิลด์เซิร์ฟเวอร์ในตำแหน่งเดียวกัน

หลังจากสร้างคีย์รีจิสทรีต่อไปนี้: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A ตั้งค่า InstallationFolder เป็น C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A

คุณยังสามารถอ้างอิงรีจิสทรีในเครื่องของคุณที่ติดตั้ง VS2010 ไว้แล้วหากคุณสับสนเกี่ยวกับสิ่งที่ต้องทำกับรีจิสทรีบนบิลด์เซิร์ฟเวอร์


สำหรับฉันคำตอบของ Simmo ไม่ได้ผล - การแฮ็กรีจิสทรีนี้ทำได้ (Win 2K3 SP2)
FinnNk

7

ฉันพบข้อผิดพลาดเดียวกัน แต่ในสถานการณ์อื่น: ใช้VS 2010 Expressและพยายามใช้คำตอบของ Simmoเพื่อตั้งค่าเวอร์ชัน SDK อย่างชัดเจน - อย่างไรก็ตาม WindowsSdkVer.exe (เครื่องมือตัวตั้งค่าเวอร์ชัน) ดูเหมือนจะไม่กำหนดเป้าหมาย Express (เข้าใจได้เนื่องจากมีข้อ จำกัด )

ฉันใช้ VS 2010 Express บน Win 7 Prof. และต้องการใช้ v7.0A ของ Win SDK เสมอ (ซึ่งไม่มี exes ที่จำเป็นทั้งหมด) และไม่สำคัญว่าฉันจะตั้งค่าเวอร์ชันใดเป็นปัจจุบันอย่างชัดเจนโดยใช้ WindowsSdkVer.exe (มันคอยรายงานว่าตั้งค่าเวอร์ชันปัจจุบันของ SDK แต่สำหรับ VS 2008 แม้ว่าฉันจะติดตั้ง Ex 2010 เท่านั้น)

ดังนั้นวิธีแก้ปัญหาราคาถูกของฉันคือติดตั้ง v7.0 WIN SDK (หรือเวอร์ชันอื่นเช่น v7.1) จากนั้นเปลี่ยนชื่อโฟลเดอร์ระบบไฟล์เป็น v7.0A - โดยทั่วไปฉันโกหก VS 2010 Express แต่ใช้งานได้แล้ว!


5

โครงการหนึ่งของคุณใช้ sgen.exe (Server Generator) เพื่อสร้างบริการเว็บ คุณต้องติดตั้ง SDK เพื่อสร้างเซิร์ฟเวอร์หรือลบการอ้างอิงบริการเว็บออกจากโครงการ


1
หรือตั้งค่า "Generate serialization assembly: Off" ในแท็บ Build ของคุณสมบัติโปรเจ็กต์ของบริการเว็บ
samneric

1
GOTCHA: ถ้าคุณปิดบนแท็บบิลด์ตรวจสอบให้แน่ใจว่าคุณทำสิ่งนี้สำหรับการกำหนดค่าบิลด์ที่เกี่ยวข้อง (ดร็อปดาวน์ที่ด้านบนของแท็บบิลด์) ในกรณีของฉันมันเป็นเพียงเซิร์ฟเวอร์บิลด์ที่มีปัญหาดังนั้นฉันจึงต้อง เปลี่ยนสิ่งนี้ในการกำหนดค่า "รุ่น"
Myster

4

ฉันสงสัยว่าไฟล์เป้าหมายกำลังแทนที่เส้นทางเครื่องมือฉันได้ดูอย่างรวดเร็วในไฟล์นี้และตั้งค่า SDKToolsPath เป็น $ TargetFrameworkSDKToolsDirectory ภายใต้เป้าหมายบางส่วนในนั้น ฉันไม่คิดว่าคุณควรต้องตั้งค่าสิ่งเหล่านี้ในสภาพแวดล้อม แต่อาจต้องแก้ไขในไฟล์โครงการของคุณ

โปรดทราบว่าตามหน้านี้http://nant.sourceforge.net/ Nant ไม่รองรับ. Net 4.0 นี่อาจเป็นปัญหาจริงหรือไม่?

ขออภัยฉันรู้ว่านี่ไม่สามารถตอบคำถามของคุณได้ :(


ถูกต้อง NAnt ยังไม่รองรับรูปแบบไฟล์โปรเจ็กต์ / โซลูชันสำหรับ VS2010 ซึ่งเป็นสาเหตุที่ฉันโทรไปหา MSBuild สำหรับขั้นตอนการคอมไพล์จริง จะตรวจสอบไฟล์เป้าหมาย
Scott Mayfield

4

ฉันมีปัญหาเดียวกันกับเครื่อง Windows 10 ใหม่เอี่ยม การตั้งค่าของฉัน:

  • Windows 10
  • ติดตั้ง Visual Studio 2015 แล้ว
  • Windows 10 SDK

แต่ฉันไม่สามารถสร้างโครงการ. NET 4.0 ได้:

Die Aufgabe konnte "AL.exe" mit dem SdkToolsPath-Wert "" oder dem Registrierungsschlüssel "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86

วิธีแก้ไข: หลังจากพยายาม (และล้มเหลว) ในการติดตั้ง Windows 7 SDK (เนื่องจากนั่นรวมถึง. NET 4.0 SDK ด้วย) ฉันจำเป็นต้องติดตั้ง Windows 8 SDK และตรวจสอบให้แน่ใจว่าได้ติดตั้ง ".NET Framework 4.5 SDK" แล้ว

มันบ้า ... แต่ได้ผล


สิ่งนี้ช่วยฉันใน Windows 10 ด้วย
bourbert

3

คุณไม่ได้ติดตั้ง SDK เวอร์ชัน 7.0A จริงหรือ? นั่นคือปัญหาที่คุณต้องแก้ไข ดูในไฟล์บันทึกการติดตั้ง VS2010 เพื่อดูว่ามีอะไรผิดพลาด SDK ควรมีอยู่ใน c: \ program files \ microsoft sdks \ windows \ 7.0a และต้องมีคีย์รีจิสทรีที่อยู่ในรายการด้วย การรันด้วย sgen.exe เวอร์ชัน 6.0a นั้นไม่เป็นไรเนื่องจากต้องใช้คอมไพเลอร์ที่ไม่ถูกต้อง


1
โปรดจำไว้ว่านี่คือเซิร์ฟเวอร์บิลด์ดังนั้นการติดตั้งสภาพแวดล้อม VS2010 ทั้งหมดจึงไม่ใช่ตัวเลือกแรกของฉัน ฉันไม่พบการดาวน์โหลด Windows SDK 7.0a
Scott Mayfield

3
ฉันไม่เห็นปัญหา การรันบิลด์บนเครื่องที่มีการกำหนดค่าไม่ตรงกับเครื่อง dev นั่นเป็นปัญหาที่จะทำให้คุณหมดเร็ว
Hans Passant

3

ตั้งค่าSdk40ToolsPathแทนที่จะSdkToolsPathระบุตำแหน่งอื่นที่ไม่ใช่ไดเร็กทอรีการติดตั้ง

ฉันประสบปัญหาที่คล้ายกันกับ AL.exe เพราะฉันเพิ่ง xcopied เครื่องมือลงในเครื่องสร้างแทนที่จะติดตั้ง SDK ดังนั้นคีย์รีจิสทรีปกติจึงหายไป ฉันรันบิลด์ที่มีเอาต์พุตการวินิจฉัย (/ verbosity: diagnostic) และสังเกตว่ามีการกำหนดพา ธ เครื่องมือ SDK หลายรายการ: Sdk40ToolsPath, Sdk35ToolsPath และ SdkToolsPath การตั้งค่า Sdk40ToolsPath ให้ชี้ไปที่โฟลเดอร์ bin ของเวอร์ชัน SDK ที่เหมาะสมช่วยแก้ปัญหาให้ฉันได้


คุณตั้งค่า Sdk40ToolsPath ไว้ที่ไหน
Michael Freidgeim

ฉันคิดว่ามันต้องถูกเพิ่มเข้าไปในเส้นทางสภาพแวดล้อม อย่างไรก็ตามมันไม่ได้ผลสำหรับฉัน
Timothy Lee Russell

ขออภัยนานมาแล้วฉันลืมรายละเอียดไป แต่ฉันคิดว่ามันเป็นตัวแปรสภาพแวดล้อมหรือตั้งค่าในไฟล์โครงการ MSBuild นอกจากนี้โปรดทราบว่าคำถามเดิมเกี่ยวข้องกับ. NET Framework 4.0 / VS2010 แต่อาจต้องใช้ตัวแปรที่แตกต่างกันสำหรับเฟรมเวิร์กรุ่นที่ใหม่กว่า
IanS

2

ฉันเห็นด้วยกับคำตอบของ IanS ไม่จำเป็นต้องติดตั้ง SDK ใหม่ ตรวจสอบให้แน่ใจว่าค่าคีย์รีจิสทรี SDK35ToolsPath และ SDK40ToolPath สำหรับ MSBuild ชี้ไปที่ค่าคีย์รีจิสทรีที่ถูกต้อง

ในกรณีของฉันโครงการของฉันถูกกำหนดเป้าหมายสำหรับ. NET 3.5 และฉันต้องตั้งค่า SDK35ToolsPath สำหรับคีย์ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 ถึง $ (Registry: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v6.0A \ WinSDKNetFxTools @ InstallationFolder) และทุกอย่างได้ผล


2

เรามีพีซีที่สร้าง winXP และใช้ Visual Build Pro 6 เพื่อสร้างซอฟต์แวร์ของเรา เนื่องจากนักพัฒนาบางคนของเราใช้ VS 2010 ตอนนี้ไฟล์โครงการจึงมีการอ้างอิงถึง "เครื่องมือเวอร์ชัน 4.0" และจากสิ่งที่ฉันบอกได้สิ่งนี้บอกว่า Visual Build จำเป็นต้องค้นหา sdk7.x ที่ไหนสักแห่งแม้ว่าเราจะสร้างสำหรับ. NET 3.5 เท่านั้น . สิ่งนี้ทำให้ไม่พบ lc.exe ฉันพยายามหลอกมันโดยชี้มาโครทั้งหมดไปที่ 6.0A sdk ที่มาพร้อมกับ VS2008 ซึ่งติดตั้งบนพีซี แต่ไม่ได้ผล

ในที่สุดฉันก็ใช้งานได้โดยดาวน์โหลดและติดตั้ง sdk 7.1 จากนั้นฉันสร้างคีย์รีจิสทรีสำหรับ 7.0A และชี้เส้นทางการติดตั้งไปยังเส้นทางการติดตั้งของ 7.1 sdk ตอนนี้พบ "lc.exe" ที่เข้ากันได้อย่างมีความสุขและโค้ดทั้งหมดคอมไพล์ได้ดี ฉันรู้สึกว่าตอนนี้ฉันจะสามารถคอมไพล์โค้ด. NET 4.0 ได้แม้ว่าจะไม่ได้ติดตั้ง VS2010 แต่ฉันยังไม่ได้ลอง


2

ToolsVersion = "4.0" ให้ฉันในโครงการ MSBuild ของฉัน:

<Project DefaultTargets="Do" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

ในกรณีของฉันฉันใช้ ToolsVersion = "14.0" สำหรับ VS 2015 และสิ่งนี้ช่วยแก้ปัญหาได้
AndrewSilver

2

ขั้นแรกตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลด dotNetFx40_Full_x86_x64.exe และติดตั้งแล้ว (โดยทั่วไปจะผูกกับ Visual Stdio)

จากนั้นตั้งค่าตัวแปรสภาพแวดล้อมใหม่อย่างรวดเร็วที่ตัวแปรระบบ เช่นด้านล่าง: "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.


นี่คือการแก้ปัญหา ขอคำแนะนำหากใครมีปัญหาเดียวกับ I ตัวแปร Env จำเป็นต้องเรียกว่า TargetFrameworkSDKToolsDirectory ไม่ใช่ SdkToolsPath !!!
Markus

1

ฉันมีปัญหาเดียวกันนี้และได้ติดตั้ง Windows SDK 7.0 และ Windows SDK 7.1 ซึ่งไม่สามารถแก้ไขปัญหาได้ สาเหตุของปัญหาสำหรับฉันคือไลบรารีคลาสที่ละเมิดถูกสร้างขึ้นด้วย Target Framework ของ. NET Framework 2.0

ฉันเปลี่ยนเป็น. NET Framework 4.0 และทำงานในเครื่องและเมื่อตรวจสอบในเซิร์ฟเวอร์ Build ก็สร้างสำเร็จ


1

ฉันมีปัญหาที่คล้ายกันโดยเฉพาะอย่างยิ่งmsbuild ล้มเหลว: MSB3086, MSB3091: ไม่พบ "AL.exe", "resgen.exe"

บนเครื่อง Windows 7 64 บิตฉันติดตั้ง. Net framework 4.5.1 และ Windows SDK สำหรับ Windows 8.1

แม้ว่าการตั้งค่าสำหรับ SDK จะบอกว่าเป็นเวอร์ชันล่าสุด แต่อาจจะไม่ใช่ ฉันแก้ไขปัญหาโดยการลบ SDK เวอร์ชันที่ติดตั้งทั้งหมดจากนั้นติดตั้งสิ่งต่อไปนี้ตามลำดับนี้:

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


1

คำตอบสั้น ๆ : ในไฟล์. csproj มีวิธีระบุพา ธ ไปยัง sgen.exe โดยใช้ 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>

เส้นทางของคุณอาจแตกต่างกัน แต่ SGenToolPath คือสิ่งที่คุณต้องการ

สำหรับรายการคุณสมบัติ MSBuild Project ทั่วไปอื่น ๆ โปรดดู: https://msdn.microsoft.com/en-us/library/bb629394.aspx

เราลงเอยด้วยการใช้การตั้งค่า SGenToolPath ในไฟล์. csproj แทนการแก้ไขค่ารีจิสทรีบนบิลด์เซิร์ฟเวอร์ การแก้ไขค่ารีจิสทรีในเครื่องในเครื่องของฉันก็ใช้ได้เช่นกัน แต่ซับซ้อนกว่าเล็กน้อยและเราไม่ต้องการยุ่งกับรีจิสตรีในบิลด์เซิร์ฟเวอร์

สำหรับรีจิสทรี: ในกรณีนั้นปัญหาคือ SDK40ToolsPath (s) ภายใต้ HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild ถูกชี้ไปที่ค่ารีจิสทรี $ (Registry: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x86 @ InstallationFolder) ซึ่งไม่มีอยู่ ฉันแค่แทนที่ด้วยเส้นทางจริงโดยตรง


1

ฉันก็ประสบปัญหานี้เช่นกันขณะพยายามสร้างปลั๊กอินโดยใช้ Visual Studio 2017 บนคอมพิวเตอร์ในที่ทำงานที่ยุ่งเหยิงอย่างน่ากลัว หากคุณค้นหาอินเทอร์เน็ตสำหรับ "ไม่พบ resgen.exe" คุณจะพบคำแนะนำทั้งหมดนี้เหมือนกับ ' เพียงใช้ regedit เพื่อแก้ไข Windows Registry ของคุณและสร้างคีย์ใหม่ที่นี่จากนั้นคัดลอกและวางเนื้อหาของโฟลเดอร์นี้ลงใน โฟลเดอร์อื่นนี้ blah blah blah '

ฉันใช้เวลาหลายสัปดาห์ในการสร้างความสับสนให้กับ Windows Registry ด้วย regedit อาจเพิ่มคีย์ย่อยจำนวนโหลและ ResGen.exe ที่คัดลอกวางลงในไดเรกทอรีต่างๆบางครั้งก็วางไว้ในโฟลเดอร์ 'bin' บางครั้งก็เก็บไว้ในโฟลเดอร์หลัก เป็นต้น

ในที่สุดฉันก็รู้ว่า "เฮ้ถ้า Visual Studio ให้ข้อความแสดงข้อผิดพลาดที่ละเอียดกว่านี้จะไม่มีปัญหา" ดังนั้นเพื่อรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดฉันจึงรัน MSBuild.exe โดยตรงบนไฟล์ * .csproj ของฉันจากบรรทัดคำสั่ง:

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

แน่นอนคุณจะต้องเปลี่ยนรายละเอียดเส้นทางเพื่อให้เหมาะกับสถานการณ์ของคุณ แต่อย่าลืมใส่ 1) พา ธ ทั้งหมดไปยัง MSBuild.exe 2) พา ธ ที่สมบูรณ์ไปยังไฟล์ * .csproj ของคุณ 3) the -fl -flp: logfile = part ซึ่งจะบอกให้ MSBuild สร้างไฟล์บันทึกของแต่ละขั้นตอนที่ใช้ในกระบวนการ 4) ตำแหน่งที่คุณต้องการบันทึกไฟล์ * .log และ 5); verbosity = การวินิจฉัยซึ่งโดยพื้นฐานแล้วจะบอก MSBuild เพื่อรวมรายละเอียดมากมายในไฟล์ * .log

หลังจากคุณทำสิ่งนี้การสร้างจะล้มเหลวเช่นเคย แต่คุณจะเหลือไฟล์ * .log ที่แสดงตำแหน่งที่ MSBuild ค้นหาไฟล์ ResGen.exe ของคุณ ในกรณีของฉันที่ด้านล่างของไฟล์ * .log ฉันพบ:

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"

โดยพื้นฐานแล้ว MSBuild มองในห้าไดเรกทอรีแยกต่างหากสำหรับ ResGen.exe จากนั้นก็ยอมแพ้ นี่เป็นรายละเอียดที่คุณไม่สามารถหาได้จากข้อความแสดงข้อผิดพลาดของ Visual Studio และจะช่วยแก้ปัญหาได้: เพียงใช้ regedit เพื่อสร้างคีย์สำหรับตำแหน่งใดตำแหน่งหนึ่งจากห้าตำแหน่งเหล่านั้นและใส่ค่า "InstallationFolder" ไว้ในคีย์ ซึ่งควรชี้ไปที่โฟลเดอร์ที่ ResGen.exe ของคุณอยู่ (ในกรณีของฉันคือ "C: \ Program Files \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.7.2 Tools")

หากคุณเป็นสาขาวิชามนุษยศาสตร์เช่นตัวฉันเองที่ไม่มีพื้นฐานในคอมพิวเตอร์คุณอาจถูกล่อลวงให้แก้ไข heck ออกจาก Windows Registry ของคุณและคัดลอก ResGen.exe ไปวางทั่วทุกที่เมื่อต้องเผชิญกับข้อผิดพลาดเช่นนี้ (ซึ่งก็คือ แน่นอนการปฏิบัติที่ไม่ดี) ควรทำตามขั้นตอนที่ระบุไว้ข้างต้นจะดีกว่า: 1) เรียกใช้ MSBuild.exe โดยตรงบนไฟล์ * .csproj ของคุณเพื่อค้นหาตำแหน่งที่แน่นอน MSBuild กำลังมองหา ResGen.exe จากนั้น 2) แก้ไข Windows Registry ของคุณอย่างแม่นยำเพื่อให้ MSBuild สามารถค้นหา ResGen ได้ exe


ฉันลองแล้ว แต่ด้วยเหตุผลบางอย่างฉันไม่ได้รับรายการเส้นทางที่คุณแสดง ฉันพบโพสต์ที่คล้ายกันกับโพสต์ของคุณในไซต์นี้: community.sdl.com/developers-more/developers/…ดังนั้นฉันจึงรู้ว่าควรใช้งานได้ แต่ไม่มีประโยชน์ คุณใช้ MSBuild เวอร์ชันใด
user11809641

ดูเหมือนว่าฉันกำลังใช้ MSBuild เวอร์ชัน 4.0.30319 ฉันยังติดตั้งเวอร์ชัน 3.5, 3.0 และ 2.0.50727 ในคอมพิวเตอร์เครื่องนี้ด้วย ฉันพยายามเรียกใช้ MSBuild เวอร์ชันเหล่านั้นบนไฟล์ * .csproj ของฉัน (ในลักษณะเดียวกับที่ระบุไว้ด้านบน) แต่ไม่ได้ผล ... ไม่ได้สร้างไฟล์ * .log /// เมื่อคุณเรียกใช้ MSBuild บนไฟล์ * .csproj ของคุณอย่างน้อยคอมพิวเตอร์จะสร้างไฟล์บันทึก * หรือไม่ ความเข้าใจของฉันคือมีไฟล์บันทึกไม่มีข้อมูลเฉพาะเกี่ยวกับเส้นทางที่ค้นหาเมื่อค้นหา ResGen.exe - ถูกต้องหรือไม่
todbott

ดูเหมือนว่าฉันมี MSBuild เวอร์ชันเดียวกัน (4.0.30319) และใช่คุณพูดถูก ฉันได้รับไฟล์บันทึก แต่ไม่ได้ให้ข้อมูลใด ๆ เกี่ยวกับเส้นทางรีจิสทรี คุณใช้เส้นทางใดในห้าเส้นทางข้างต้นที่คุณใช้
user11809641

ฉันใช้เส้นทางแรกในรายการ - เพียงแค่เพิ่ม "InstallationFolder" ในคีย์ SOFTWARE \ WOW6432Node \ Microsoft \ Microsoft SDKs \ NETFXSDK \ 4.6.2 \ WinSDK-NetFx40Tools-x86 นอกจากนี้ไฟล์ * .log นั้นยาวมาก - หลายพันบรรทัดในกรณีของฉัน ฉันไม่พบข้อมูลเส้นทางด้วยตาเปล่า ฉันลงเอยด้วยการเปิดไฟล์ * .log ใน Notepad และค้นหา "ResGen.exe" ซึ่งนำพื้นที่ที่เกี่ยวข้อง (ข้อมูลเส้นทาง) มาสู่ความสนใจของฉัน
todbott

1
เปอร์ - ขอแสดงความยินดี คุณกลายเป็นหนึ่งในไม่กี่คน (ไม่กี่ร้อยคนฉันเดาว่า) ที่ต่อสู้ผ่านข้อผิดพลาดและความลึกลับและรวบรวมปลั๊กอินสำหรับ Trados ได้สำเร็จ ขอให้โชคดีกับการเผยแพร่ปลั๊กอินของคุณแล้วพบกันที่ SDL Appstore!
todbott

1

ฉันแก้ไขโดยส่งสิ่งนี้เป็นพารามิเตอร์บรรทัดคำสั่งไปยัง msbuild.exe:

ไมล์สะสมของคุณจะแตกต่างกันไปขึ้นอยู่กับเวอร์ชัน SDK ที่คุณมีในระบบของคุณ

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

0

นอกจากตัวดัดแปลงรีจิสทรีแล้วคุณอาจต้องเปลี่ยนเวอร์ชันของ. net sdk การตั้งค่าของคุณที่ตั้งไว้ใน Visual Studio

ฉันประสบปัญหานี้และตัดสินใจตรวจสอบการตั้งค่าการดีบักโครงการ

Project => Toolbar Properties => ปุ่ม Debug Advance Compile Options

Target Framework (การกำหนดค่าทั้งหมด) ถูกตั้งค่าเป็น 3.0 ซึ่งไม่ได้อยู่ในระบบของฉัน

ฉันเปลี่ยนเป็น 4.0 จากนั้นต้องรีสตาร์ทโครงการและ Visual Studio 2010

จากนั้นโครงการสร้างขึ้นโดยไม่มีข้อผิดพลาดและดำเนินการ


ฉันทำผิดพลาดมันพบดังต่อไปนี้ Project => Toolbar Properties => ปุ่ม Compile Advance Compile Options ฉันยังสร้างโปรเจ็กต์ใหม่และโปรเจ็กต์ใหม่. net ถูกตั้งค่าเป็น 3.0 ดังนั้นจึงจำเป็นต้องเปลี่ยนการตั้งค่าเริ่มต้นด้วย Scott A. Tovey
Scott Tovey

ฉันพบว่าเมื่อคุณสร้างโครงการที่ด้านบนของหน้าต่างจะมีรายการแบบเลื่อนลงของกรอบงานทั้งหมด ทุกอย่างจะแสดงรายการไม่ว่าจะติดตั้งหรือไม่ก็ตาม เมื่อคุณเลือกกรอบงานและสร้างโครงการจากรายการนั้นจะยังคงเป็นค่าเริ่มต้นจนกว่าคุณจะเปลี่ยนเป็นกรอบงานอื่นสำหรับโครงการใหม่ นี่เป็นความประมาทเล็กน้อยรายการควรมีเฉพาะเฟรมเวิร์กที่ติดตั้งบนระบบเท่านั้น
Scott Tovey

0

ฉันมีปัญหาที่คล้ายกัน ฉันได้ทำโครงการโดยใช้Visual Studio 2010แล้วได้รับข้อผิดพลาดข้างต้นเมื่อฉันรวบรวมโดยใช้Visual Studio 2012ไฟล์. ฉันคัดลอกเนื้อหาทั้งหมดC:\Program Files (x86)\Microsoft SDKs\Windows\v7.0AลงในC:\Program Files (x86)\Microsoft SDKs\Windows\v8.0Aและแก้ไขปัญหาของฉันได้อย่างง่ายดาย


3
ฉันหวังว่าจะมีการโหวตสำหรับทางออกที่แย่ที่สุดในโลก นี้จะเป็นมัน
jonypony3

0

ฉันเพิ่งมีข้อผิดพลาดนี้กับไฟล์. sln ที่สร้างขึ้นครั้งแรกใน Visual Studio 2010 (และสร้างโดย Visual Studio 2010 และ TFS 2010) ฉันได้แก้ไขไฟล์โซลูชันเพื่อไม่สร้างโครงการที่ไม่ควรสร้างในการกำหนดค่าเฉพาะและสตูดิโอภาพเปลี่ยนส่วนหัวของไฟล์โซลูชันจาก:

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

ถึง:

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

การตั้งค่ากลับไปเป็นเวอร์ชัน 2010 ดั้งเดิมช่วยแก้ปัญหาของฉันได้ ฉันเดาว่าความเข้ากันได้ย้อนหลังใน Visual Studio ยังไม่สมบูรณ์แบบ



0

CMD wrapper
ฉันได้ลองทุกสิ่งจากที่นี่และอื่น ๆ อีกมากมาย ไม่มีอะไรช่วยฉัน

ฉันใช้ตัวห่อ CMD สำหรับ MSBuild และ DevEnv.com
แนวคิดหลักภายในของ wrapper คือการสร้างสภาพแวดล้อมที่เตรียมไว้โดยการเรียก Command Prompts จาก Visual Studio supply จากนั้นส่งผ่านพารามิเตอร์อินพุตมาตรฐานไปยังการเรียก MSBuild หรือ DevEnv.com

อย่างไรก็ตามบนบิลด์เซิร์ฟเวอร์ของฉันตอนนี้ฉันสามารถสร้างโครงการจาก Visual Studio เวอร์ชันต่างๆได้แล้ว

วิธีใช้
ฉันต้องแทนที่การโทรไปยัง MSBuild และ DevEnv ด้วยการเรียกไปยังแบตช์ไฟล์ของฉัน
และฉันไม่ได้เปลี่ยนพารามิเตอร์อินพุตใด ๆ เป็นตัวอย่างสำหรับการเรียก MSBuild wrapper ของฉัน:

MsBuild_Wrapper.bat MySolution.sln /target Build /property:Configuration=Release

พร้อมวิธีแก้ปัญหา
ในความเป็นจริงฉันมีปัญหามากขึ้นกับการย้ายข้อมูลจาก VS 2010 เป็น VS 2015 แต่อันนี้เป็นครั้งแรกและยากที่สุด
ดังนั้นสูตรการช่วยเหลือที่เรียบง่ายของฉันสำหรับ Build Serverจึงอยู่ที่นี่ อาจเป็นเรื่องยากที่จะเข้าใจสไตล์ CMD ทั้งหมดนี้ตั้งแต่วินาทีแรก แต่ฉันหวังว่าตรรกะใด ๆ ก็ชัดเจน

คำแนะนำ
มี
MSBuild Command Prompt for Visual StudioและDeveloper Command Prompt for Visual Studio
ฉันใช้อย่างเหมาะสมสำหรับ MSBuild และ DevEnv.com แต่อาจเป็น MSBuild Command Prompt ก็เพียงพอแล้ว

สำหรับ VS 2015 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\คำสั่งผู้ที่แจ้งอยู่ที่นี่ หรือดูเมนูโปรแกรมของ Windows

เพื่อส่งผ่านพารามิเตอร์อินพุตทั้งหมดไปยัง MSBuild หรือ DevEnv ภายในไฟล์แบตช์ที่ฉันใช้ CALL MSBuild %*

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.