2014-07-23 7 views
16

मोनो में अपनी प्रोजेक्ट को तैनात करने के लिए, मैंने इसे .Net 4.0 में डाउनग्रेड कर दिया है जैसा कि मैंने लाइब्रेरी के साथ किया है जिसे मैं संदर्भित कर रहा हूं (CommonUtils)। हालांकि, मैं अभी भी निम्न अपवाद हो रही है: क्योंकि यह विधानसभा "Newtonsoft.Json, संस्करण = 4.5.0.0 पर एक अप्रत्यक्ष निर्भरता हैविजुअल स्टूडियो एक "गलत" संकलन समय अपवाद फेंक रहा है

प्राथमिक संदर्भ" CommonUtils "हल नहीं किया जा सकता है, संस्कृति = तटस्थ , PublicKeyToken = 30ad4fe6b2a6aeed "जिसे" .NETFramework, Version = v4.5 "फ्रेमवर्क के विरुद्ध बनाया गया था। यह वर्तमान में लक्षित ढांचे ".NETFramework, संस्करण = v4.0" की तुलना में एक उच्च संस्करण है।

क्या मैं समस्या को हल करने की कोशिश की है:

  • मैं दोनों परियोजनाओं
  • मैं गया है कई बार परियोजनाओं/समाधान साफ ​​करने की कोशिश की सभी Nuget संकुल को फिर से स्थापित किया है, सभी बिन हटाना/obj फ़ोल्डर एक पुनर्निर्माण सब कुछ
  • मैं क्रम में विधानसभा का नाम बदला है यकीन है कि कुछ भी नहीं होने के लिए कैश किया गया है इस बात का

कोई नहीं मदद की।

दोनों परियोजनाओं को .NET 4.0 के रूप में संकलित करने के लिए सेट किया गया है। संदर्भ संकलित असेंबली कॉमनयूट्स को "बाहरी पुस्तकालय" -फोल्डर में कॉपी करके है, क्योंकि यह डीएलएल अन्य परियोजनाओं में भी उपयोग किया जाता है। जो CommonUtils के साथ एक साथ bin फ़ोल्डर में ले जाया जाता है - - Newtonsoft.Json.dll पर

राइट-क्लिक करें विवरण/फ़ाइल विवरण में से पता चलता है: Json.NET .NET 4.0

मैं बहुत यकीन है कि मैं सब कुछ के लिए सही है कि कर रहा हूँ। नेट 4.0 और विजुअल स्टूडियो मुझे लाइब्रेरी जोड़ने और ऑटो-पूर्णता के साथ मेरा समर्थन करने देता है, केवल संकलन उल्लिखित चेतावनी फेंकता है। चेतावनी का एक परिणाम के रूप में, अचानक मैं अपवाद प्रकार CommonUtils से संदर्भित से कोई भी मौजूद है

नाम स्थान नाम के प्रकार 'CommonUtils' नहीं पाया जा सका मिल (यदि आप एक का उपयोग कर के निर्देश या एक विधानसभा याद कर रहे हैं संदर्भ?)

मैं यह काम करने के लिए और क्या प्रयास कर सकता हूं?

पीएस: मुझे कुछ साल पहले इसी तरह की समस्या थी, जहां संकलन के लिए एक पुरानी असेंबली का उपयोग किया गया था, और इसे सचमुच खिड़कियों और दृश्य स्टूडियो को स्क्रैच से स्थापित करके हल किया गया था, लेकिन मुझे बस ऐसा करने में ऐसा नहीं लगता इस समय।

अद्यतन:

यह किसी अन्य कंप्यूटर पर काम करता है: मैं फ़ोल्डर संरचना में एक ही ऑपरेटिंग सिस्टम (विंडोज 8.1) और एक ही विजुअल स्टूडियो 2013 के साथ एक और कंप्यूटर के लिए यूएसबी स्टिक के माध्यम से लिया है - मैं के रूप में जहाँ तक बता सकते हैं, दोनों कंप्यूटरों में सभी अद्यतन स्थापित होना चाहिए - और वहां यह काम करता है।

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

(मैं समझता हूँ, इसका मतलब है कि दोनों कंप्यूटर संभवतः एक ही स्थापित सब कुछ नहीं हो सकता है, लेकिन मैं कैसे अंतर, हो सकता है क्या इस तरह से गलत हो सकता है के साथ कुछ संकेत को खोजने के लिए पता नहीं है?)


अद्यतन 2:

प्रक्रिया एक्सप्लोरर बहुत ज्यादा मदद नहीं की, लेकिन जब मैं नैदानिक ​​लॉग के साथ सब कुछ संकलित, मैं मैं कुंजी संकेत मिल गया लगता है:

... 
5> Unified primary reference "Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". (TaskId:158) 
5>  Using this version instead of original version "4.5.0.0" in "C:\<SolutionFolder>\packages\WebGrease.1.6.0\lib\WebGrease.dll" because of a binding redirect entry in the file "Web.config". (TaskId:158) 
5>  Using this version instead of original version "4.5.0.0" in "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Http.dll" because of a binding redirect entry in the file "Web.config". (TaskId:158) 
5>  Using this version instead of original version "4.5.0.0" in "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll" because of a binding redirect entry in the file "Web.config". (TaskId:158) 
5>  Resolved file path is "C:\<SolutionFolder>\packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.dll". (TaskId:158) 
5>  Reference found at search path location "{HintPathFromItem}". (TaskId:158) 
5>  Found related file "C:\<SolutionFolder>\packages\Newtonsoft.Json.6.0.3\lib\net40\Newtonsoft.Json.xml". (TaskId:158) 
5>  The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:158) 
... 

हालांकि, मुझे उसी कंप्यूटर पर सटीक वही संदेश मिलता है जहां बिल्ड काम कर रहा है।

Skipping NuGet package Newtonsoft.Json 6.0.3 since it is already installed. 

क्या installed इस संदर्भ में क्या मतलब है:

साथ ही दोनों कंप्यूटरों शुरुआत में इस लाइन को दिखाने? Nu Nuet इसे डाउनलोड किया? या यह कहीं जीएसी में है, लेकिन मुझे यह नहीं मिला? (टिप्पणी देखें)

और मशीन, जहां संकलन काम करता है, मैं इसके साथ ही इस उत्पादन प्राप्त करें:

1> Dependency "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed". (TaskId:17) 
1>  Resolved file path is "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Blend\Newtonsoft.Json.dll". (TaskId:17) 
1>  Reference found at search path location "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}". (TaskId:17) 
1>   For SearchPath "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies". (TaskId:17) 
1>   Considered "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\Newtonsoft.Json.winmd", but it didn't exist. (TaskId:17) 
1>   Considered "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\Newtonsoft.Json.dll", but it didn't exist. (TaskId:17) 
1>   Considered "C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\Newtonsoft.Json.exe", but it didn't exist. (TaskId:17) 
1>   For SearchPath "{TargetFrameworkDirectory}". (TaskId:17) 
1>   Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Newtonsoft.Json.winmd", but it didn't exist. (TaskId:17) 
1>   Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Newtonsoft.Json.dll", but it didn't exist. (TaskId:17) 
1>   Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Newtonsoft.Json.exe", but it didn't exist. (TaskId:17) 
1>   For SearchPath "{Registry:Software\Microsoft\.NETFramework,v4.0,AssemblyFoldersEx}". (TaskId:17) 
1>   Considered AssemblyFoldersEx locations. (TaskId:17) 
1>  Required by "CommonUtils". (TaskId:17) 
1>  The ImageRuntimeVersion for this reference is "v4.0.30319". (TaskId:17) 

लेकिन मैं इसे अपने कंप्यूटर, जहां संकलन में विफल रहता है

पर नहीं दिख रहा है अंतिम अद्यतन:

मैं छोड़ दिया और मेरा पूरा सिस्टम पुनर्स्थापित - यह अब काम करता है, लेकिन यह सवाल जहां गलत Newtonsoft.Json.dll से आया उत्तर नहीं मिलता है और क्यों यह में दिखाई नहीं था जीएसी, मैं एफ कर सकते हैं वास्तव में फिर से उस परियोजना पर काम करते हैं।

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

मेरे पास वीएचडी पर टूटी हुई प्रणाली की एक छवि है, इसलिए यदि कोई और एक महान समाधान के साथ आता है, तो मैं इसे वीएम में आज़मा सकता हूं।

+0

स्ट्रिंग "4.5.0.0" के लिए अपने समाधान में सभी फाइलों खोज का प्रयास करें। –

+0

इसके अलावा, 'CommonUtils' के लिए "विशिष्ट संस्करण का उपयोग करें" ध्वज देखें। हो सकता है कि यह "हां" पर सेट हो और आप जो चाहते हैं उससे उच्च संस्करण का उपयोग करने के लिए मजबूर हो। – CompuChip

+4

आपको * अप्रत्यक्ष * निर्भरता पर ध्यान केंद्रित करने की आवश्यकता होगी। CommonUtils का एक अन्य असेंबली का संदर्भ है और * * * असेंबली Newtonsoft.Json.dll के नए संस्करण के साथ बनाया गया था। यह सीधे वीएस से दिखाई नहीं दे रहा है, आप प्रत्यक्ष निर्भरताओं पर ildasm.exe चलाकर इसे देख सकते हैं। –

उत्तर

17

मैं एक ही मुद्दा था, और समाधान में c:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\v2.3\ref

यह इस Connect bug report एक समाधान के रूप में वर्णित है Newtonsoft.json.dll स्थित नष्ट करने के लिए किया गया था।

संपादित करें: मूल बग रिपोर्ट हटा दिया है, संभावित नई/संबंधित/एक ही मुद्दा: https://connect.microsoft.com/VisualStudio/feedback/details/816985

+3

मेरे मामले में मुझे सी: \ प्रोग्राम फ़ाइलें \ माइक्रोसॉफ्ट एसडीके \ Azure \ .NET SDK \ v2.8 \ में newtonsoft.json.dll की खोज करनी पड़ी और फिर उन्हें रीसायकल में ले जाया गया। तीन उदाहरण थे। अब यह काम कर रहा है! – reckface

+0

इस उत्तर में इंगित कनेक्ट बग का लिंक वर्तमान में टूटा हुआ है। मेरा मानना ​​है कि प्रश्न में समस्या # 816985 है और इसे यहां देखा जा सकता है: https://connect.microsoft.com/VisualStudio/feedback/details/816985। मुद्दा वास्तव में वीएस.NET में एक बग है जिससे यह गलत तरीके से न्यूटॉन्सॉफ्ट निर्भरता को हल करता है। –

+0

मैं प्रोग्रामफाइल फ़ोल्डर के तहत किसी भी प्रतिलिपि में देखता हूं। Https://connect.microsoft.com/VisualStudio/feedback/details/816725/visual-studio-referencing-dll-in-c-program-files-x86-microsoft-visual-studio-12-0-blend- निर्देशिका -incorrectly – user845279

1

मैंने अपनी पूरी प्रणाली को छोड़ दिया और पुनः स्थापित किया - यह अब काम करता है, हालांकि यह उस सवाल का जवाब नहीं देता है जहां गलत न्यूटॉन्सॉफ्ट.जेसन.dll आया था और यह अंत में जीएसी में क्यों नहीं दिखाई दिया, मैं अंत में कर सकता हूं फिर उस परियोजना पर काम करते हैं।

1

वेब प्रोजेक्ट्स के लिए वीएस 2013 में एक बग है जहां एक नया न्यूटॉन्सॉफ्ट.जेसन 4.5.0 संदर्भ डिफ़ॉल्ट प्रोजेक्ट टेम्पलेट से .csproj में छोड़ा गया है जिसे मैन्युअल रूप से हटाया जाना आवश्यक है। शायद यह मुद्दा है? मेरे पास एक वेबसाइट पर एक समान समस्या थी, सिवाय इसके कि मेरे पास एक विरोधाभासी संस्करण चेतावनी थी क्योंकि न्यूजॉन्स्ट से जुड़े एक ही प्रोजेक्ट में न्यूटनसॉफ्ट.जेसन के एक नए संस्करण का भी संदर्भ था। मुझे परियोजना को मैन्युअल रूप से अनलोड करना था और इसे हटाना पड़ा चेतावनी को प्रकट होने से रोकें।

+0

नहीं, मेरी सभी प्रोजेक्ट फ़ाइलें केवल न्यूटॉन्सॉफ्ट.जेसन (6.0.3), या न्यूटॉन्सॉफ्ट.जेसन के नवीनतम संस्करण का संदर्भ नहीं देती हैं। साथ ही आप पढ़ सकते हैं कि यह एक अलग मशीन पर काम करता है, प्रोजेक्ट फ़ाइल में गलत संदर्भ अन्य मशीन पर भी एक ही त्रुटि को फेंक देना चाहिए था। – peter

+0

कभी-कभी संस्करण विवाद इस बात के आधार पर प्रस्तुत नहीं कर सकते कि आउटपुट निर्देशिका में कौन सा संस्करण कॉपी किया गया है (MSBuild एक मनमाने ढंग से चुनता है) तो बस किसी अन्य मशीन पर काम करने के लिए ऐसा हो सकता है, लेकिन यदि आपने .csproj फ़ाइल के एक्सएमएल का निरीक्षण किया है और यह ' वहां कुछ और होना चाहिए। मुझे लगता है कि बिन निर्देशिका खाली होने के बाद भी आपने अपनी मूल मशीन पर एक क्लीन किया था (जो इसे पुनर्स्थापित करने और नई मशीन पर होने के बाद होता)? –

+0

मैंने इसे साफ़ नहीं किया - क्योंकि मेरे अनुभव के लिए एक साफ हमेशा सब कुछ नहीं हटाता है (पहले से ही त्रुटियां थीं जहां एक साफ पर्याप्त नहीं था) - मैंने सभी बिन और ओबीजे निर्देशिका हटा दी। मैंने स्रोत कोड (बिना किसी पुस्तकालय के) में भी चेक किया और यह सुनिश्चित करने के लिए कि फ़ोल्डर वास्तव में साफ है, इसे एक अलग जगह पर चेक आउट किया गया है। इसके अलावा गलत DLL मेरी प्रोजेक्ट निर्देशिका में कहीं भी नहीं था, इसे सिस्टम से कहीं भी ले जाना चाहिए था, लेकिन मुझे नहीं पता कि यह कहां या कौन सा और यह मेरे लिए असंभव था। – peter

संबंधित मुद्दे