MSBuild चल रहा है SDKToolsPath पढ़ने में विफल


130

हाउडी, मैं एक NAnt स्क्रिप्ट को चलाने वाले मुद्दे का एक सा हो रहा हूँ जो VS2008 के साथ संकलित करते समय और इसके जुड़े उपकरणों के साथ, मेरी .Net 2.0 आधारित वेबसाइट को ठीक से बनाने के लिए उपयोग किया जाता है। मैंने हाल ही में सभी प्रोजेक्ट / समाधान फ़ाइलों को VS2010 में अपग्रेड किया है, और अब मेरी बिल्ड निम्न त्रुटि के साथ विफल हो गई है:

[exec] C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets (2249,9): त्रुटि MSB3086: टास्क "dgenThatPath" या रजिस्ट्री का उपयोग करके "sgen.exe" नहीं खोज सका। कुंजी "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v7.0A"। सुनिश्चित करें कि SdkToolsPath सेट है और उपकरण SdkToolsPath के अंतर्गत सही प्रोसेसर विशिष्ट स्थान पर मौजूद है और Microsoft Windows SDK स्थापित है

अब, मेरे पास बिल्ड सर्वर पर स्थापित विंडोज एसडीके के पूर्व संस्करण (.Net 3.5) हैं, और पूर्ण .Net 4.0 फ्रेमवर्क स्थापित है, लेकिन मैं विंडोज़ एसडीके के .net 4.0 विशिष्ट संस्करण में नहीं चला हूं।

थोड़े से प्रयोग और शोध के बाद, मैंने अंत में एक नया पर्यावरणीय चर "SDKToolsPath" सेटअप किया और इसे अपनी विंडोज़ 6.0 sdk फ़ोल्डर में sgen.exe की प्रतिलिपि को इंगित किया। इससे एक ही त्रुटि उत्पन्न हुई, लेकिन मुझे यह ध्यान में आया कि भले ही SDKToolsPath पर्यावरण चर IS सेट है (पुष्टि की कि मैं इसे कमांड लाइन पर "इको" कर सकता हूं और इसका अपेक्षित मूल्य है), त्रुटि संदेश से संकेत मिलता है कि यह इंगित करता है पढ़ा नहीं जा रहा है (खाली उद्धरणों पर ध्यान दें)।

अधिकांश जानकारी मुझे मिली है। नेट 3.5 (या इससे पहले) विशिष्ट। अभी तक वहाँ से संबंधित 4.0 नहीं। त्रुटि कोड MSB3086 की खोज से कुछ भी उपयोगी नहीं हुआ। किसी भी विचार यह क्या हो सकता है?

स्कॉट


इस पोस्ट में संबंधित मुद्दा। मैंने वहां भी जवाब पोस्ट किया। stackoverflow.com/questions/1109955/…
डिएगो सी।

जवाबों:


15

मुझे इस समस्या को ठीक करने के लिए हमारे बिल्ड सर्वर पर बुलेट को काटने और वीएस 2010 स्थापित करने की आवश्यकता थी। जहाँ तक मैं देख सकता हूँ, MSDN पर कहीं भी Windows SDK का कोई 7.0A संस्करण उपलब्ध नहीं है। हालाँकि, VS 2010 स्थापित करना इसे स्थापित करने के लिए प्रकट होता है, जिससे 7.0A regkey और प्रोग्राम Files \ Microsoft SDKs \ Windows में 7.0A फ़ोल्डर बन जाता है।


9
मैं किसी सर्वर पर Visual Studio 2010 स्थापित नहीं करना पसंद करता हूँ। मैं वर्तमान विंडोज एसडीके को v7.1 पर सेट करने के नीचे सिमो के सुझाव को पसंद करता हूं। WindowsSdkVer.exe C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Setup में स्थित है (यह मानते हुए कि इसे C: \ Program Files में इंस्टॉल किया गया था)।
फिलिप

55
मैंने पाया है कि यदि आप केवल Windows SDK 7.1 और .NET 4.0 स्थापित करते हैं। MSBuild SDK40ToolsPath और SDK35ToolsPath के लिए उचित पथ सेट नहीं करता है। इसे ठीक करने के लिए, मुझे HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 में कुछ प्रविष्टियाँ बदलनी थीं: "SDK40ToolsPath" = "$ (रजिस्ट्री: HKEYOCOCAL_MACHINE \\ SOFTWARE \\ Microsoft \ SD Microsoft \\ v7 \\ v7" .1 \\ WinSDK-NetFx40Tools-x86 @ InstallationFolder) "इसी तरह" v7.0A "को SDK35ToolsPath और FrameworkSDKRoot में" v7.1 "में बदलें।
BlueMonkMN

7
शीश - मैं खुद फिर से उसी समस्या में भाग गया, इसके लिए गुगली की और अपना जवाब पाया! :) कुछ ऐसा लगता है कि मुझे अपना परिवर्तन रीसेट करना है और मुझे लगता है कि मुझे इसे फिर से लागू करना होगा।
BlueMonkMN

3
ARRRGH! नवीनतम .NET 4.0 पैचेज़ (2011-08-11) ने इन रजिस्ट्री सेटिंग्स को ओवरवोट किया!
si618

8
मेरी पिछली प्रतिक्रिया पर अपडेट करें। ऐसा प्रतीत होता है कि 64-बिट OS पर, HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 में समान मूल्यों को अपडेट करने के लिए भी आवश्यक हो सकता है, और HKEY_LOCAL_MACHINE_MACHINE में मानों को 8.0 SDK स्थापित करना या अपडेट करना आवश्यक हो सकता है। सॉफ़्टवेयर \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 और HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 \ 11.0 ने उपरोक्त सभी 8.0 SDK को स्थापित करने के अलावा किया था, और I (एक बैच के रूप में) संकलन करने में असमर्थ था कदम) सभी 4.0 \ 11.0 नोड्स के लिए मेरे अद्यतन शामिल थे।
BlueMonkMN

227

मैं बिल्ड सर्वर पर विजुअल स्टूडियो लगाने का सामना नहीं कर सका।

SDK v7.0A विजुअल स्टूडियो 2010 के साथ स्थापित SDK है (A इंगित करता है कि यह VS रिलीज़ है)। तब से, एक नया संस्करण जारी किया गया है। विंडोज 7 और .NET फ्रेमवर्क AKA v7.1 के लिए माइक्रोसॉफ्ट विंडोज एसडीके ।

मैंने इसे अपने बिल्ड सर्वर पर स्थापित किया है। और फिर विंडोज एसडीके 7.1 कमांड प्रॉम्प्ट (प्रारंभ => सभी प्रोग्राम => माइक्रोसॉफ्ट विंडोज एसडीके 7.1) के माध्यम से, मैं एसडीके के डिफ़ॉल्ट संस्करण को 7.1 होने के लिए सेट करता हूं।

कदम:

cd Setup

WindowsSdkVer.exe -version:v7.1

लॉर्डहिट की टिप्पणी को शामिल करने के लिए संपादित करें: पूरे एसडीके को स्थापित करने की आवश्यकता नहीं है। सिर्फ ".NET डेवलपमेंट / इन्टेलिसेंस और रेफरेंस असेंबली" और ".NET डेवलपमेंट / टूल्स" विकल्पों को स्थापित करना ही पर्याप्त है।


4
यह मेरे लिए पूरी तरह से काम करता है, सी: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications में फ़ाइलों की प्रतिलिपि मेरे VS मशीन से संयुक्त है।
dnolan

1
मैं मूल लेखक के रूप में एक ही समस्या का सामना कर रहा था और इस जवाब ने इसे हल कर दिया! मुझे अपनी बिल्ड मशीन पर Visual Studio 2010 स्थापित करने की आवश्यकता नहीं थी।
SolutionYogi

37
इसके अलावा, केवल स्पष्ट करने के लिए, पूरे एसडीके को स्थापित करने की आवश्यकता नहीं है। सिर्फ ".NET डेवलपमेंट / इन्टेलिसेंस और रेफरेंस असेंबली" और ".NET डेवलपमेंट / टूल्स" विकल्पों को स्थापित करना ही पर्याप्त है। यह और dnolan की टिप्पणी से फ़ाइलों की प्रतिलिपि बनाना।
लॉर्डहिट्स 16

इस समाधान के लिए धन्यवाद, इसने हमारे बिल्ड सर्वर पर मेरे लिए पूरी तरह से काम किया! FYI करें- जिस किसी से भी पूछताछ की जा सकती है, बिल्ड सर्वर Windows Server 2008 x64 है।
एडम वेबर

इस उत्तर के लिए बहुत बहुत धन्यवाद; इसी के साथ काम में भी इसी मुद्दे पर भाग गया।
अबे

20

बस अपने MsBuild को मान के साथ GenerateSerializationAssemblies पैरामीटर पास करें।

msbuild.exe /p:GenerateSerializationAssemblies=Off

7
msbuild.exe / p: GenerateSerializationAssemblies = बंद
डैनियल

2
या वेब सेवा के प्रोजेक्ट गुणों के बिल्ड टैब में "सीरियल क्रिएशन असेंबली: ऑफ" सेट करें।
समरैनिक

6
यह वास्तव में क्या करता है?
क्रश करें

1
गोटा: यदि आप इसे बिल्ड टैब पर बंद कर देते हैं, तो सुनिश्चित करें कि आप यह उस बिल्ड कॉन्फ़िगरेशन के लिए कर रहे हैं जो प्रासंगिक है, (ड्रॉपडाउन ऑफ बिल्ड टैब के ऊपर) मेरे मामले में यह केवल मुद्दे के साथ बिल्ड सर्वर था, इसलिए मुझे करना पड़ा इसे 'रिलीज़' कॉन्फ़िगरेशन में बदलें।
मिस्टर

14
मैं सिर्फ बेतरतीब ढंग से झंडे का निर्माण प्यार करता हूँ कोई सुराग नहीं वे वास्तव में क्या करते हैं।
एरोनल्स

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
यह वही है जो मैंने किसी विज़ुअल स्टूडियो और बिल्ड टूल्स 2019 के साथ सर्वर में विंडोज 10 एसडीके के लिए कर रहा था। कोई भी अन्य समाधान मदद करने के लिए नहीं लग रहा था और इसने एक साफ तरीके से चाल चली।
निकोलस फंतांस

8

मुझे हाल ही में हमारे बिल्ड सर्वर पर एक समान समस्या का सामना करना पड़ा।

मैंने अपने कंप्यूटर (जिसमें VS2010 स्थापित किया है) से उसी स्थान पर बिल्ड सर्वर पर 7.0A फ़ोल्डर (C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A) की प्रतिलिपि बनाई।

निम्न रजिस्ट्री कुंजी बनाने के बाद: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v \ _A। C: \ Program Files \ Microsoft SDKs \ Windows \ 7.0A के लिए InstallFolder सेट करें।

यदि आप बिल्ड सर्वर पर रजिस्ट्री के साथ क्या करना है के बारे में उलझन में हैं, तो आप वीएस2010 के साथ अपनी मशीन पर रजिस्ट्री का संदर्भ भी दे सकते हैं।


मेरे लिए, सिम्मो का जवाब काम नहीं आया - यह रजिस्ट्री हैक हालांकि (विन 2K3 SP2)।
फिननेक

7

मैं एक ही त्रुटि में लेकिन एक अलग स्थिति में चला गया हूं: वीएस 2010 एक्सप्रेस का उपयोग करना और एसडीके संस्करण को स्पष्ट रूप से सेट करने के लिए सिमो के उत्तर का उपयोग करने की कोशिश करना - हालांकि WindowsSdkVer.exe (संस्करण सेटर टूल) एक्सप्रेस को लक्षित नहीं लगता है (क्योंकि यह सीमित है) )।

मैं विन 7 प्रो पर वीएस 2010 एक्सप्रेस का उपयोग कर रहा हूं और यह हमेशा विन एसडीके के v7.0A का उपयोग करना चाहता है (जिसमें सभी आवश्यक एक्सईएस नहीं हैं), और यह स्पष्ट नहीं है कि मैं किस संस्करण का उपयोग करके स्पष्ट रूप से सेट करता हूं। WindowsSdkVer.exe (यह रिपोर्ट करता है कि यह एसडीके के वर्तमान संस्करण को सेट करता है, लेकिन वीएस 2008 के लिए हालांकि मैं केवल 2010 में एक्स स्थापित किया गया था।)

तो मेरा सस्ता काम v7.0 विन एसडीके (या v7.1 जैसा कोई अन्य संस्करण) स्थापित करना था और फिर अपने फाइल सिस्टम फ़ोल्डर का नाम बदलकर v7.0A कर दिया - मूल रूप से मैंने अभी वीएस 2010 एक्सप्रेस से झूठ बोला था, लेकिन अब यह काम करता है!


5

आपकी एक परियोजना वेब सेवा उत्पन्न करने के लिए sgen.exe (सर्वर जनरेटर) का उपयोग करती है। आपको सर्वर बनाने और प्रोजेक्ट से वेब सेवा संदर्भ निकालने के लिए एसडीके स्थापित करने की आवश्यकता है।


1
या वेब सेवा के प्रोजेक्ट गुणों के बिल्ड टैब में "सीरियल क्रिएशन असेंबली: ऑफ" सेट करें।
समरैनिक

1
गोटा: यदि आप इसे बिल्ड टैब पर बंद कर देते हैं, तो सुनिश्चित करें कि आप यह उस बिल्ड कॉन्फ़िगरेशन के लिए कर रहे हैं जो प्रासंगिक है, (ड्रॉपडाउन ऑफ बिल्ड टैब के ऊपर) मेरे मामले में यह केवल मुद्दे के साथ बिल्ड सर्वर था, इसलिए मुझे करना पड़ा इसे 'रिलीज़' कॉन्फ़िगरेशन में बदलें।
मिस्टर

4

मुझे लगता है कि लक्ष्य फ़ाइल उपकरण पथ को ओवरराइड कर रही है, मुझे इस फ़ाइल में एक त्वरित नज़र थी और वहां कुछ लक्ष्यों के तहत SDKToolsPath को $ TargetFrameworkSDKToolsDirectory पर सेट किया गया है। मुझे नहीं लगता कि आपको इसे पर्यावरण में वैसे भी सेट करने की आवश्यकता है, लेकिन उन्हें आपकी प्रोजेक्ट फ़ाइलों में फिक्सिंग की आवश्यकता हो सकती है।

ध्यान दें कि इस पृष्ठ के अनुसार http://nant.sourceforge.net/ Nant .Net 4.0 का समर्थन नहीं करता है, क्या यह वास्तविक समस्या हो सकती है?

क्षमा करें, मुझे पता है कि यह वास्तव में आपके प्रश्न का उत्तर नहीं देता है :(


सही है, NAnt अभी तक VS2010 के लिए परियोजना / समाधान फ़ाइल स्वरूपों का समर्थन नहीं करता है, यही कारण है कि मैं वास्तविक संकलन कदम के लिए MSBuild को बुला रहा हूं। लक्ष्य फ़ाइल की जाँच करेगा।
स्कॉट मेफ़ील्ड

4

मेरे पास एक बिल्कुल नई विंडोज 10 मशीन पर एक ही मुद्दा था। मेरा सेटअप:

  • विंडोज 10
  • विजुअल स्टूडियो 2015 स्थापित
  • विंडोज 10 एसडीके

लेकिन मैं .NET 4.0 प्रोजेक्ट नहीं बना सका:

डाई ऑफ़बेबे काँटे "AL.exe" मिट डेम SdkToolsPath-Wert "" oder dem Registrierungsschlüssel "HKEY_LOCAL_MACHINE \ SOFTWARE \" Microsoft \ Microsoft \ Ks \ Windows \ v8.0A \ WinSDK-NetFx40Tools-x8686

समाधान: विंडोज 7 एसडीके स्थापित करने के लिए (और असफल होने के बाद) (क्योंकि इसमें भी .NET 4.0 एसडीके शामिल है) मुझे विंडोज 8 एसडीके को स्थापित करने और ".NET फ्रेमवर्क 4.5 एसडीके" स्थापित करने की आवश्यकता है।

यह पागल है ... लेकिन काम किया।


इससे मुझे विंडोज 10 पर भी मदद मिली।
बूर्बर्ट जूल

3

आपके पास वास्तव में एसडीके संस्करण 7.0 ए स्थापित नहीं है? यह एक समस्या है जिसे आपको ठीक करना होगा। VS2010 में लॉग इन फ़ाइलों को देखें कि क्या गलत हुआ। SDK को c: \ program files \ microsoft sdks \ windows \ 7.0a में सूचीबद्ध होना चाहिए और सूचीबद्ध रजिस्ट्री कुंजी भी मौजूद होनी चाहिए। Sgen.exe के 6.0a संस्करण के साथ चलना ठीक नहीं है, यह गलत कंपाइलर का उपयोग करने के लिए बाध्य है।


1
याद रखें, यह एक बिल्ड सर्वर है, इसलिए पूरा VS2010 वातावरण स्थापित करना मेरी पहली पसंद नहीं था। मैं विंडोज एसडीके 7.0 ए
स्कॉट मेफील्ड

3
मुझे समस्या नहीं दिख रही है। एक मशीन पर एक बिल्ड चल रहा है जो कॉन्फ़िगरेशन देव मशीनों से मेल नहीं खाता है, यह एक समस्या है जो आपको जल्दी से पहन लेगी।
हंस पैसेंट

3

स्थापित निर्देशिका के अलावा किसी स्थान को निर्दिष्ट करने के Sdk40ToolsPathबजाय सेट करें SdkToolsPath

मैंने AL.exe के साथ एक समान समस्या को मारा क्योंकि मैंने एसडीके को स्थापित करने के बजाय निर्माण मशीन पर सिर्फ उपकरण को बंद कर दिया था, इसलिए सामान्य रजिस्ट्री कुंजियां गायब थीं। मैंने डायग्नोस्टिक आउटपुट (/ वर्बोसिटी: डायग्नोस्टिक) के साथ एक बिल्ड चलाया और देखा कि कई एसडीके टूल पथ परिभाषित थे: Sdk40ToolsPath, Sdk35ToolsPath और SdkToolsPath। एसडीके संस्करण के बिन फ़ोल्डर को इंगित करने के लिए Sdk40ToolsPath को सेट करना मेरे लिए समस्या को हल करता है।


आपने Sdk40ToolsPath कहाँ सेट किया?
माइकल फ्रीजिम

मैं यह मानूंगा कि इसे पर्यावरण पथ में जोड़ने की आवश्यकता है। हालांकि, यह मेरे लिए काम नहीं किया।
टिमोथी ली रसेल

खेद है कि यह बहुत समय पहले मैं विवरण भूल गया था, लेकिन मुझे लगता है कि यह या तो एक पर्यावरण चर था या MSBuild परियोजना फ़ाइल में सेट किया गया था। यह भी ध्यान दें कि मूल प्रश्न .NET फ्रेमवर्क 4.0 / VS2010 से संबंधित है, लेकिन बाद के फ्रेमवर्क संस्करणों के लिए विभिन्न चर की आवश्यकता हो सकती है।
इयन्स

2

मैं IanS के उत्तर से सहमत हूं। नया एसडीके स्थापित करने की आवश्यकता नहीं है। बस सुनिश्चित करें कि MSBuild के लिए रजिस्ट्री कुंजी मान SDK35ToolsPath और SDK40ToolPath रजिस्ट्री कुंजी मान को सही करने के लिए इंगित कर रहे हैं।

मेरे मामले में मेरी परियोजना .NET 3.5 के लिए लक्षित की गई थी और मुझे कुंजी HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 4.0 से $ (रजिस्ट्री: HKK_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SDKs \ Windows \ v6.0A \ _) के लिए SDK35ToolsPath सेट करना पड़ा। WinSDKNetFxTools @ InstallationFolder)। और सब कुछ काम कर गया।


2

हमारे पास एक winXP बिल्ड पीसी है, और हमारे सॉफ्टवेयर को बनाने के लिए विजुअल बिल्ड प्रो 6 का उपयोग करें। चूंकि हमारे कुछ डेवलपर्स वीएस 2010 का उपयोग करते हैं, इसलिए प्रोजेक्ट फ़ाइलों में "टूल संस्करण 4.0" का संदर्भ होता है और जो मैं बता सकता हूं, यह विज़ुअल बिल्ड बताता है कि इसे कहीं-कहीं sdk7.x खोजने की आवश्यकता है, भले ही हम केवल .NET 3.5 के लिए निर्माण करते हैं। । इसके कारण इसे lc.exe नहीं मिला। मैंने वीसी 200 के साथ आए 6.0A एसडीके के सभी मैक्रोज़ को इंगित करके इसे बेवकूफ बनाने की कोशिश की, जो पीसी पर स्थापित है, लेकिन यह काम नहीं किया।

मैं अंततः इसे डाउनलोड करने और 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">

ठीक है, मेरे मामले में मैंने वीएस 2015 के लिए टूलवर्जन = "14.0" का इस्तेमाल किया और इस मुद्दे को हल किया
एंड्रयूसिल्वर

2

पहले यह सुनिश्चित कर लें कि आप पहले से डॉटनेटएक्सएक्स ४०_फुल_एक्स ६६_६४.४० डाउनलोड और इंस्टॉल कर चुके हैं (यह आमतौर पर विजुअल स्टैडियो के साथ बाइंड होता है)।

फिर जल्दी से सिस्टम चर पर एक नया पर्यावरण चर सेट करें। नीचे की तरह: "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 परिवर्तनीय को TargetFrameworkSDSDoolsDirectory कहा जाना चाहिए न कि SdkToolsPath !!!
मार्कस

1

मेरे पास यही मुद्दा था और मैंने विंडोज एसडीके 7.0 और विंडोज एसडीके 7.1 स्थापित किया था जो न तो इस मुद्दे को तय करते थे। मेरे लिए समस्या का कारण यह था कि अपमानजनक वर्ग पुस्तकालय .NET फ्रेमवर्क 2.0 के लक्ष्य ढांचे के साथ बनाया गया था।

मैंने इसे .NET फ्रेमवर्क 4.0 में बदल दिया और स्थानीय रूप से काम किया और जब बिल्ड सर्वर में जाँच की तो इसे सफलतापूर्वक बनाया गया।


1

मेरे पास एक समान मुद्दा था, विशेष रूप से msbuild विफल: MSB3086, MSB3091: "AL.exe", "resgen.exe" नहीं मिला

64 बिट्स विंडोज 7 मशीन पर, मैंने विंडोज 8.1 के लिए .नेट फ्रेमवर्क 4.5.1 और विंडोज एसडीके स्थापित किया।

हालाँकि एसडीके के लिए सेटअप कहता है कि यह अप टू डेट था, शायद यह नहीं था। मैंने इस क्रम में 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 फ़ाइल में, sen.exe के लिए पथ निर्दिष्ट करने का एक तरीका है, SGENTTPAD का उपयोग कर:

<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 प्रोजेक्ट गुणों की सूची के लिए, देखें: https://msdn.microsoft.com/en-us/library/bb629394.aspx

हमने बिल्ड सर्वर पर रजिस्ट्री मानों को संपादित करने के बजाय .csproj फ़ाइल में इस SGenToolPath सेटिंग का उपयोग करके समाप्त किया। मेरे स्थानीय मशीन पर रजिस्ट्री मूल्यों को संपादित करने के साथ ही काम किया था, लेकिन थोड़ा अधिक जटिल था और हम बिल्ड सर्वर पर रजिस्ट्री के साथ गड़बड़ नहीं करना चाहते थे।

रजिस्ट्री के लिए: उस स्थिति में समस्या यह थी कि HKLM \ SOFTWARE \ Wow6432Node \ Microsoft \ MSBuild के तहत SDK40ToolsPath (s) रजिस्ट्री मान $ की ओर इशारा कर रहे थे (रजिस्ट्री: HKEYEYOCAL_MACHINE \ SOFTWARE \ Microsoft SDKs \ Windows \ v8.0A) \ WinSDK-NetFx40Tools-x86 @ InstallationFolder) जो मौजूद नहीं था। मैंने इसे सीधे वास्तविक पथ से बदल दिया।


1

मुझे, मेरे भयानक रूप से गड़बड़ कार्यस्थल कंप्यूटर पर विज़ुअल स्टूडियो 2017 का उपयोग करके प्लगइन बनाने की कोशिश करते समय भी इस समस्या का सामना करना पड़ा। यदि आप "resgen.exe को खोजने में असमर्थ" के लिए इंटरनेट पर खोज करते हैं, तो आप यह सब सलाह पा सकते हैं, जैसे कि ' अपनी विंडोज़ रजिस्ट्री को संपादित करने के लिए regedit का उपयोग करें और यहां एक नई कुंजी बनाएं और इस फ़ोल्डर की सामग्री को कॉपी-पेस्ट करें। यह अन्य फ़ोल्डर, ब्ला ब्ला ब्ला। '

मैंने अपने विंडोज रजिस्ट्री को regedit के साथ खिलवाड़ करने में केवल सप्ताह बिताए, शायद एक दर्जन उप-कुंजी और कॉपी-पेस्ट किए गए ResGen.exe को कई अलग-अलग निर्देशिकाओं में जोड़ा, कभी-कभी इसे 'बिन' फ़ोल्डर में डाल दिया, कभी-कभी इसे केवल मुख्य फ़ोल्डर में रखा, आदि।

अंत में, मुझे एहसास हुआ, "अरे, अगर विज़ुअल स्टूडियो ने अधिक विस्तृत त्रुटि संदेश दिया, तो इसमें से कोई भी समस्या नहीं होगी।" इसलिए, त्रुटि पर अधिक विवरण प्राप्त करने के लिए, मैंने 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"

बेशक, आपको अपनी स्थिति को फिट करने के लिए पथ के विवरण को बदलना होगा, लेकिन MSBuild.exe 2 के लिए 1) पूरा रास्ता सुनिश्चित करें) अपने * .csproj फ़ाइल 3) के लिए पूर्ण पथ: -fl -pp। logfile = part, जो MSBuild को इस प्रक्रिया में उठाए गए प्रत्येक चरण की एक लॉग फ़ाइल बनाने के लिए कहेगा, 4) वह स्थान जिसे आप चाहते हैं * .log फ़ाइल को सहेजा जाए और 5); वर्बोसिटी = डायग्नोस्टिक, जो मूल रूप से 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 उपकरण" था)।

यदि आप कंप्यूटरों में बिना किसी पृष्ठभूमि वाले अपने आप में एक प्रमुख व्यक्ति हैं, तो आपको इस तरह की एक त्रुटि के साथ सामना करने के दौरान अपने विंडोज रजिस्ट्री और कॉपी-पेस्ट ResGen.exe को पूरी जगह संपादित करने का लालच दिया जा सकता है। बेशक, बुरा अभ्यास)। ऊपर उल्लिखित प्रक्रिया का पालन करना बेहतर है: 1) MSBuild.exe को सीधे अपने * .csproj फ़ाइल पर चलाएँ सटीक स्थान का पता लगाने के लिए MSBuild ResGen.exe की तलाश में है तो 2) अपने विंडोज रजिस्ट्री को ठीक से संपादित करें ताकि MSGuild ResGen को ढूंढ सके। प्रोग्राम फ़ाइल।


मैंने यह कोशिश की लेकिन किसी कारण से मुझे आपके द्वारा प्रदर्शित किए गए रास्तों की सूची नहीं मिली। मुझे इस साइट पर आपके लिए एक समान पोस्ट मिली: community.sdl.com/developers-more/developers/… तो मुझे पता है कि यह काम करना चाहिए, लेकिन कोई फायदा नहीं हुआ। आप MSBuild के किस संस्करण का उपयोग कर रहे हैं?
user11809641

ऐसा लगता है कि मैं MSBuild संस्करण 4.0.30319 का उपयोग कर रहा हूं। मेरे पास इस कंप्यूटर पर संस्करण 3.5, 3.0 और 2.0.50727 भी है। मैंने MSBuild के उन संस्करणों को अपनी * .csproj फ़ाइल (ऊपर बताए अनुसार फैशन में) चलाने की कोशिश की, लेकिन यह काम नहीं किया ... एक * .log फ़ाइल भी नहीं बनाई। /// जब आप अपने * .csproj फ़ाइल पर MSBuild चलाते हैं, तो कंप्यूटर कम से कम एक * लॉग फ़ाइल का उत्पादन कर रहा है? मेरी समझ यह है कि एक लॉग फ़ाइल है, बस उन पथों के बारे में कोई विशेष जानकारी नहीं है जो ResGen.exe की तलाश में खोजे गए थे - क्या यह सही है?
todbott

ऐसा लगता है कि मेरे पास MSBuild (4.0.30319) का समान संस्करण है। और हाँ, आप सही हैं। मुझे एक लॉग फ़ाइल मिल रही है, लेकिन यह रजिस्ट्री रास्तों पर कोई जानकारी नहीं देती है। आपके द्वारा ऊपर पोस्ट किए गए पांच रास्तों में से किसका आपने उपयोग किया है?
user11809641

मैंने सूची में 1 पथ का उपयोग किया - बस कुंजी सॉफ़्टवेयर "WOW6432Node \ Microsoft \ Microsoft SDKs \ NETFXSDK \ 4.6.2 \ WinSDK-NetFx40Tools-x86 में एक" इंस्टॉलेशन फ़ोल्डर "जोड़ा। इसके अलावा, * .log फ़ाइल वास्तव में बहुत लंबी है - हजारों लाइनें, मेरे मामले में। मुझे अपनी नग्न आंखों से पथ की जानकारी नहीं मिली। मैंने नोटपैड में * .log फ़ाइल खोलना और "ResGen.exe" की खोज करना समाप्त किया, जिसने मेरे ध्यान में प्रासंगिक क्षेत्र (पथ जानकारी) को लाया।
todbott

1
सुपर - बधाई हो! आप मुट्ठी भर लोगों में से एक बन गए हैं (कुछ सौ, मुझे लगता है) जो त्रुटियों और रहस्य के माध्यम से लड़े हैं और वास्तव में सफलतापूर्वक ट्रेडो के लिए एक प्लगइन संकलित किया है। आपके प्लगइन प्रकाशन के साथ शुभकामनाएँ, आपको एसडीएल ऐपस्टोर पर मिलते हैं!
19

1

मैंने इसे msbuild.exe को कमांड-लाइन पैरामीटर के रूप में पारित करके तय किया:

आपका माइलेज आपके सिस्टम पर आपके द्वारा लिए गए एसडीके संस्करण के आधार पर अलग-अलग होगा

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

0

रजिस्ट्री मोड के अलावा, आपको .net के संस्करण को बदलने की आवश्यकता हो सकती है, जो विज़ुअल स्टूडियो में आपकी सेटिंग्स को सेट करता है।

मुझे यह समस्या आ रही थी और प्रोजेक्ट डिबग सेटिंग्स की जाँच करने का निर्णय लिया।

प्रोजेक्ट => टूलबार गुण => डिबग एडवांस कंपाइल विकल्प बटन

लक्ष्य फ़्रेमवर्क (सभी कॉन्फ़िगरेशन) 3.0 पर सेट किया गया था जो मेरे सिस्टम पर नहीं है।

मैंने इसे 4.0 में बदल दिया, फिर प्रोजेक्ट और Visual Studio 2010 को पुनरारंभ करना पड़ा।

परियोजना तब त्रुटियों के बिना बनी और चली।


मैंने एक गलती की है जो निम्न में से एक है। प्रोजेक्ट => टूलबार गुण => कंपाइल एडवांस कंपाइल ऑप्शन बटन मैंने एक नया प्रोजेक्ट भी बनाया और नया प्रोजेक्ट .net को 3.0 पर सेट किया गया। इसलिए डिफ़ॉल्ट सेटिंग को भी बदलना होगा। स्कॉट ए। टोवी
स्कॉट टॉवी

मुझे पता चला कि जब आप एक परियोजना बनाते हैं, तो खिड़की के शीर्ष पर सभी चौखटों की एक ड्रॉप डाउन सूची होती है। सब कुछ सूचीबद्ध है चाहे वह स्थापित हो या न हो। एक बार जब आप एक रूपरेखा का चयन करते हैं और उस सूची से एक परियोजना बनाते हैं, तो यह तब तक डिफ़ॉल्ट रहता है जब तक कि आप इसे नए प्रोजेक्ट के लिए किसी अन्य ढांचे में नहीं बदलते। यह थोड़ा लापरवाह है, सूची में केवल उन रूपरेखाओं को शामिल किया जाना चाहिए जो सिस्टम पर स्थापित हैं।
स्कॉट टोवी

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 फ़ाइल के साथ यह त्रुटि थी जो मूल रूप से विज़ुअल स्टूडियो 2010 में बनाई गई थी (और विज़ुअल स्टूडियो 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 संस्करण पर वापस सेट करने से मेरी समस्या ठीक हो गई। मुझे लगता है कि विजुअल स्टूडियो में बैकवर्ड संगतता अभी भी पूर्ण नहीं हुई है।


0

दृश्य स्टूडियो के "मरम्मत" का उपयोग करने का प्रयास करें। इसने मेरे लिए काम किया।


0

सीएमडी आवरण
मैंने यहां से और भी अधिक सभी सामान की कोशिश की है। कुछ भी मेरी मदद नहीं की।

मैंने MSBuild और DevEnv.com के लिए एक CMD रैपर लगाया।
इस तरह के आवरण के अंदर मुख्य विचार विजुअल स्टूडियो आपूर्ति से कमांड प्रॉम्प्ट कहकर एक तैयार वातावरण बनाना है। और फिर MSBuild या DevEnv.com के कॉल के लिए मानक इनपुट मापदंडों को पास करें।

वैसे भी, मेरे बिल्ड-सर्वर पर अब मैं विभिन्न विज़ुअल स्टूडियो संस्करणों से परियोजनाएं बना सकता हूं।

कैसे उपयोग करने के लिए
मुझे अपने बैच फ़ाइल रैपर को कॉल करके MSBuild और DevEnv को कॉल करना था।
और मैंने कोई इनपुट पैरामीटर नहीं बदला। मेरे MSBuild आवरण कॉल के लिए एक उदाहरण के रूप में:

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

तैयार समाधान
वास्तव में, मुझे वीएस 2010 से वीएस 2015 तक एक प्रवास के साथ बहुत अधिक परेशानी हुई। लेकिन यह पहला और सबसे मुश्किल था।
तो, एक बिल्ड सर्वर के लिए मेरा मामूली बचाव नुस्खा यहां है। संभवतः पहले क्षण से इस सीएमडी शैली को समझना मुश्किल है लेकिन कोई भी तर्क स्पष्ट है, मुझे उम्मीद है।

संकेत
हैं
MSBuild Command Prompt for Visual Studioऔर Developer Command Prompt for Visual Studio
मैं उन्हें MSBuild और DevEnv.com के लिए उचित रूप से उपयोग करता हूं। लेकिन शायद MSBuild कमांड प्रॉम्प्ट पर्याप्त होगा।

वीएस 2015 के लिए वे कमांड प्रॉम्प्ट यहां हैं C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\। या विंडोज प्रोग्राम मेनू के माध्यम से देखें।

मेरे द्वारा उपयोग की जाने वाली बैच फ़ाइल के अंदर MSBuild या DevEnv के लिए सभी इनपुट पैरामीटर पास करने के लिए CALL MSBuild %*

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.