दिलचस्प पोस्ट
एक एक्सेल सेल में स्वरूपित पाठ के लिए टैग के साथ एचटीएमएल पाठ स्कैरी बहुत बुनियादी उदाहरण जावास्क्रिप्ट का उपयोग यूआरएल मान्य करने की कोशिश कर रहा है एक अंकगणितीय अभिव्यक्ति पार्सिंग और जावा में से एक पेड़ का निर्माण एंड्रॉइड के लिए वेबव्यू में ओहोरेराइड यूआरएल लोड करना चाहिए नहीं चल रहा है एक्लिप्स में एंड्रॉइड प्रोजेक्ट का पैकेज नाम कैसे बदल सकता है? पायथन में किसी ऑब्जेक्ट द्वारा कितनी मेमोरी का उपयोग किया जा रहा है, पता करें एंड्रॉइड स्टूडियो रिपोर्टिंग क्यों "यूआरआई पंजीकृत नहीं है"? जावा विभाजन () विधि अंत में खाली तार स्ट्रिप्स? Microdata मेटा टैग के साथ एक घटना में एक छवि कैसे जोड़ें? अलग-अलग राज्य के लिए छवि बटन पृष्ठभूमि छवि कैसे सेट करें? सूची में चयनित आइटम से टेक्स्ट को निकालने के लिए कैसे करें एंड्रॉइड ब्राउज़र या वेबविवे के अंदर का पता लगाएं यूआरएल सत्यापन के लिए नियमित अभिव्यक्ति (जावास्क्रिप्ट में) अजगर सूची बनाम ऐरे – कब उपयोग करने के लिए?

Assembly.GetTypes () को कॉल करते समय ReflectionTypeLoadException को रोकने के लिए कैसे करें

मैं इस तरह के कोड का उपयोग कर विशिष्ट इंटरफ़ेस को लागू करने वाले प्रकारों के लिए एक विधानसभा को स्कैन करने की कोशिश कर रहा हूं:

public List<Type> FindTypesImplementing<T>(string assemblyPath) { var matchingTypes = new List<Type>(); var asm = Assembly.LoadFrom(assemblyPath); foreach (var t in asm.GetTypes()) { if (typeof(T).IsAssignableFrom(t)) matchingTypes.Add(t); } return matchingTypes; } 

मेरी समस्या यह है कि कुछ मामलों में asm.GetTypes() को कॉल करते समय मुझे एक ReflectionTypeLoadException asm.GetTypes() मिलता है, उदाहरण के लिए यदि विधानसभा में एक विधानसभा को संदर्भित किया जाता है जो वर्तमान में उपलब्ध नहीं है।

मेरे मामले में, मुझे उन प्रकारों में कोई दिलचस्पी नहीं है जो समस्या का कारण बनती हैं। जिन प्रकार मैं खोज रहा हूं उन्हें गैर-उपलब्ध असेंबलियों की आवश्यकता नहीं है।

सवाल यह है कि क्या किसी तरह से ऐसे चीजों को छोड़ें / अनदेखा कर सकते हैं जो अपवाद का कारण बनाते हैं लेकिन फिर भी विधानसभा में निहित अन्य प्रकारों पर कार्रवाई करते हैं?

वेब के समाधान से एकत्रित समाधान "Assembly.GetTypes () को कॉल करते समय ReflectionTypeLoadException को रोकने के लिए कैसे करें"

एक काफी बुरा तरीका होगा:

 Type[] types; try { types = asm.GetTypes(); } catch (ReflectionTypeLoadException e) { types = e.Types; } foreach (var t in types.Where(t => t != null)) { ... } 

यद्यपि यह ऐसा करने के लिए निश्चित रूप से परेशान है। आप इसे "क्लाइंट" कोड में बेहतर बनाने के लिए एक एक्सटेंशन विधि का उपयोग कर सकते हैं:

 public static IEnumerable<Type> GetLoadableTypes(this Assembly assembly) { // TODO: Argument validation try { return assembly.GetTypes(); } catch (ReflectionTypeLoadException e) { return e.Types.Where(t => t != null); } } 

आप कैच ब्लॉक से return स्टेटमेंट ले जा सकते हैं – मैं खुद को वहां पर बहुत उत्सुक नहीं हूं, लेकिन यह संभवतः कम से कम कोड है …

हालांकि ऐसा प्रतीत होता है कि कुछ बिंदु पर ReflectionTypeLoadException प्राप्त किए बिना कुछ भी नहीं किया जा सकता है, ऊपर दिए गए उत्तर में सीमित हैं कि अपवाद से प्रदान किए गए प्रकारों का उपयोग करने के किसी भी प्रयास अभी भी मूल समस्या के साथ समस्या को जारी करेगा जिसके कारण प्रकार को लोड करने में असफल रहा

इस पर काबू पाने के लिए निम्नलिखित कोड विधानसभा के भीतर स्थित उन लोगों के प्रकार को सीमित करता है और एक प्रकार की सूची को प्रतिबंधित करने के लिए एक विधेय को अनुमति देता है।

  /// <summary> /// Get the types within the assembly that match the predicate. /// <para>for example, to get all types within a namespace</para> /// <para> typeof(SomeClassInAssemblyYouWant).Assembly.GetMatchingTypesInAssembly(item => "MyNamespace".Equals(item.Namespace))</para> /// </summary> /// <param name="assembly">The assembly to search</param> /// <param name="predicate">The predicate query to match against</param> /// <returns>The collection of types within the assembly that match the predicate</returns> public static ICollection<Type> GetMatchingTypesInAssembly(this Assembly assembly, Predicate<Type> predicate) { ICollection<Type> types = new List<Type>(); try { types = assembly.GetTypes().Where(i => i != null && predicate(i) && i.Assembly == assembly).ToList(); } catch (ReflectionTypeLoadException ex) { foreach (Type theType in ex.Types) { try { if (theType != null && predicate(theType) && theType.Assembly == assembly) types.Add(theType); } // This exception list is not exhaustive, modify to suit any reasons // you find for failure to parse a single assembly catch (BadImageFormatException) { // Type not in this assembly - reference to elsewhere ignored } } } return types; } 

क्या आपने विधानसभा पर विचार किया है। आप क्या करने की कोशिश कर रहे हैं यह ध्यान में रखते हुए, यह पर्याप्त हो सकता है

मेरे मामले में, एक ही समस्या आवेदन फ़ोल्डर में अवांछित विधानसभाओं की मौजूदगी के कारण हुई थी। बिन फ़ोल्डर को रिक्त करने और एप्लिकेशन को फिर से बनाने का प्रयास करें।