2010-02-11 14 views
26

किसी भी कारण से, मुझे संदर्भित असेंबली में प्रकारों की सूची नहीं मिल रही है। इतना ही नहीं, मैं इस संदर्भित असेंबली में भी शामिल नहीं हो सकता।एक संदर्भित असेंबली में सभी प्रकार कैसे प्राप्त करें?

मैंने AppDomain.CurrentDomain.GetAssemblies() की कोशिश की, लेकिन यह केवल असेंबली देता है जो पहले से ही स्मृति में लोड हो चुका है।

मैंने Assembly.GetExecutingAssembly().GetReferencedAssemblies() की कोशिश की, लेकिन यह सिर्फ mscorlib देता है।

मुझे क्या याद आ रही है?

+1

क्या आप प्रोजेक्ट द्वारा संदर्भित असेंबली का निरीक्षण करने की कोशिश कर रहे हैं, या कहीं भी फाइल सिस्टम पर बैठे हैं? – Amy

+1

मुझे संदेह है कि सीएलआर के कार्यान्वयन से सभी असेंबली से सभी प्रकार मिलना असंभव हो जाएगा क्योंकि उन्हें आयात समय पर संकलित किया जाना चाहिए, लेकिन मैं वास्तव में उस पर कोई विशेषज्ञ नहीं हूं, इसलिए आपको केवल आगे की खोज के लिए एक संकेत के रूप में मेरी टिप्पणी का उपयोग करें। – zneak

+0

@ yodaj007 संदर्भित असेंबली – AngryHacker

उत्तर

52

ध्यान दें कि Assembly.GetReferencedAssemblies में केवल एक विशेष असेंबली शामिल है यदि आप वास्तव में अपनी असेंबली में उस असेंबली में एक प्रकार का उपयोग करते हैं (या आपके द्वारा उपयोग किए जाने वाले प्रकार को उस असेंबली में एक प्रकार पर निर्भर करता है)। विजुअल स्टूडियो में संदर्भों की सूची में केवल एक असेंबली शामिल करने के लिए पर्याप्त नहीं है। हो सकता है कि यह आपके द्वारा अपेक्षित अपेक्षाओं के आउटपुट में अंतर बताए? मुझे लगता है कि यदि आप असंभव है कि प्रतिबिंब का उपयोग कर विजुअल स्टूडियो में संदर्भों की सूची में मौजूद सभी असेंबली प्राप्त करने में सक्षम होने की उम्मीद कर रहे हैं; असेंबली के लिए मेटाडेटा में असेंबली के बारे में कोई जानकारी शामिल नहीं है जिस पर दी गई असेंबली पर निर्भर नहीं है।

यही कारण है, ने कहा कि एक बार आप निम्नलिखित की तरह कुछ देना चाहिए सभी संदर्भित विधानसभाओं की एक सूची आप उन विधानसभाओं में सभी प्रकार से अधिक की गणना पुनः प्राप्त किया है:

foreach (var assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies()) { 
    Assembly assembly = Assembly.Load(assemblyName); 
    foreach (var type in assembly.GetTypes()) { 
     Console.WriteLine(type.Name); 
    } 
} 

आप विधानसभाओं कि संदर्भित की जरूरत है विजुअल स्टूडियो में आपको csproj फ़ाइल को पार्स करना होगा। इसके लिए, तत्व Reference तत्वों को देखें।

अंत में, यदि आप जानते हैं कि एक असेंबली कहां रहता है, तो आप इसे Assembly.LoadFile का उपयोग करके लोड कर सकते हैं और फिर अनिवार्य रूप से उस लोडेड असेंबली में रहने वाले प्रकारों पर गणना करने के लिए ऊपर के रूप में आगे बढ़ सकते हैं।

+1

यह मूल रूप से समस्या का सारांश है। मेरे ऐप को पहले इसके प्रकारों का उपयोग करने से पहले संदर्भित असेंबली का निरीक्षण करना चाहिए। तो नहीं, इसका निरीक्षण नहीं होने तक इसका उपयोग नहीं किया जाता है। – AngryHacker

+0

@AngryHacker: ठीक है, मुझे लगता है कि मैं समझता हूं कि आप क्या कह रहे हैं। कृपया मेरा संपादन देखें। अगर मुझे स्पष्टीकरण मदद करता है तो मुझे बताएं। – jason

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