LoaderException संपत्ति कैसे प्राप्त करें?


128

मुझे अपना सेवा संदर्भ अपडेट करते समय एक त्रुटि संदेश मिलता है:

कस्टम उपकरण चेतावनी: अनुरोधित प्रकारों में से एक या अधिक लोड करने में असमर्थ। अधिक जानकारी के लिए लोडरएक्सेप्शंस संपत्ति पुनर्प्राप्त करें।

मैं LoaderException संपत्ति कैसे प्राप्त कर सकता हूं?

अपडेट: जब मैंने डोमेन ऑब्जेक्ट प्रोजेक्ट्स को दोबारा शुरू किया तो मेरी त्रुटियां दूर हो गईं। मुझे नहीं पता कि इस मुद्दे को क्यों तय किया गया, लेकिन मुझे खुशी है कि यह काम कर रहा है।


6
आपने इसे कैसे ठीक किया? "डोमेन ऑब्जेक्ट प्रोजेक्ट को फिर से जारी करने" से आपका क्या मतलब है? (परियोजना के संदर्भ को हटा दें और इसे फिर से जोड़ें?)
निकोस त्सोकोस

जवाबों:


142
try
{
  // load the assembly or type
}
catch (Exception ex)
{
  if (ex is System.Reflection.ReflectionTypeLoadException)
  {
    var typeLoadException = ex as ReflectionTypeLoadException;
    var loaderExceptions  = typeLoadException.LoaderExceptions;
  }
}

1
मैंने आपको उत्तर के रूप में चिह्नित किया क्योंकि मुझे लगता है कि यह चेतावनी / त्रुटि का अनुभव करने वाले अन्य लोगों के लिए सबसे अधिक उपयोगी होगा।
रोज़ोन

3
मैं इस समाधान का उपयोग करने की कोशिश कर रहा हूं, लेकिन मेरी डब्ल्यूसीएफ सेवा में मेरे पास कोई प्रवेश बिंदु नहीं है जिसके आसपास वास्तव में एक कोशिश ब्लॉक लपेटना है।
जॉर्डन

3
यह जवाब मेरे लिए काम करेगा अगर इसका मेरे कोड से कोई लेना देना है। मैंने try...catchअपनी पूरी Installer.csकक्षा, और कुछ भी नहीं रखा है! जब यह चलता है तो मेरा कोड इसे नहीं फेंकता है, केवल जब मैं इंस्टॉलर को निष्पादित करने का प्रयास करता हूं। क्या किसी को पता है कि अधिक जानकारी के लिए LoaderException संपत्ति कैसे प्राप्त करें? जैसे, किसी फोल्डर में ब्राउज़ करना और लॉग फाइल देखना?
jp2code

5
कैच क्लॉज सभी अपवादों को पकड़ लेगा लेकिन केवल ReflectionTypeLoadException को हैंडल करेगा। ऐसा कुछ बेहतर होगा। catch (ReflectionTypeLoadException ex) { var typeLoadException = ex as ReflectionTypeLoadException; var loaderExceptions = typeLoadException.LoaderExceptions; }
स्कॉट मुनरो

1
@ScottMunro: यदि आप इसे एक प्रकार के रूप में पकड़ रहे हैं, तो एक ही प्रकार के साथ एक और चर क्यों बना सकते हैं? यह पर्याप्त होना चाहिए catch (ReflectionTypeLoadException ex) { var loaderExceptions = ex.LoaderExceptions; }:। इसके अलावा, जब तक आप कलाकारों के असफल होने की उम्मीद नहीं करते हैं और अशक्त के लिए जाँच करेंगे, यह बेहतर है कि एक सीधी कास्ट करें ताकि यह तुरंत विफल हो जाए और बाद में एक शून्य संदर्भ अपवाद के साथ न हो:var typeLoadException = (ReflectionTypeLoadException)ex;
नेल्सन रॉथमेल

74
catch (ReflectionTypeLoadException ex)
{        
    foreach (var item in ex.LoaderExceptions)
    {
          MessageBox.Show(item.Message);                    
    }
}

मुझे एक पुराने धागे को पुनर्जीवित करने के लिए खेद है, लेकिन लोडर अपवाद को खींचने के लिए एक अलग समाधान पोस्ट करना चाहता था (वास्तविक ReflectionTypeLoadException का उपयोग करके) किसी और के लिए इस पार आने के लिए।


2
यदि आप एक Win Service (जैसे मैं हूँ) चला रहे हैं, तो एक FYI करें, MessageBox प्रकट नहीं होगा क्योंकि UI तत्व स्वचालित रूप से अवरुद्ध हैं। बाकी कार्यान्वयन मददगार था। इसके बजाय बस एक लॉग फ़ाइल में सहेजा गया है। धन्यवाद।
विप्पी

1
"कैच स्टेटमेंट अपने स्टेटमेंट ब्लॉक को याद कर रहा है"। भगवान, मैं शक्तियों से नफरत है।
उल्लू

बहुत धन्यवाद, यह समाधान सटीक है क्योंकि यह सटीक समस्या को इंगित करता है। अपवाद को पकड़ने का कोई मतलब नहीं है और कुछ भी नहीं है।
मुहम्मद अशर हसन

5

विज़ुअल स्टूडियो में क्विक वॉच का उपयोग करके आप इस तरह से फेंके गए अपवाद के ViewDetails से LoaderException को एक्सेस कर सकते हैं:

($exception).LoaderExceptions

धन्यवाद! मुझे आश्चर्य होता है कि उस जानकारी को एक्सेस करने की आवश्यकता के बिना शामिल क्यों नहीं किया गया LoaderExceptions, क्योंकि इसमें वास्तव में प्रासंगिक जानकारी शामिल है।
19

0

एक और वैकल्पिक उन लोगों के लिए जो आसपास और / या इंटरैक्टिव मोड में जांच कर रहे हैं:

$ त्रुटि [0] .Exception.LoaderExceptions

नोट: [०] स्टैक से सबसे हाल की त्रुटि पकड़ लेता है

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