मेरे पास एक पुस्तकालय है जिसमें एक अमूर्त वर्ग है - मान लें MyAbstractClass
। इस पुस्तकालय का उपयोग कुछ अन्य परियोजनाओं (एक ऐप) द्वारा एक समाधान के भीतर किया जा रहा है।
मैं इन सभी वर्गों को प्राप्त करना चाहता हूं। मैंने नमूना Program
प्रोजेक्ट और Program.Library
बनाया है जिसमें MyAbstractClass
है।
मैंने MyAbstractClass
से प्राप्त दो परीक्षण कक्षाएं बनाई हैं। पहली परियोजना में एक (Test1Class
) और दूसरी में एक (Test2Class
)।
मैंने इस कोड की कोशिश की कि मुझे क्या चाहिए:
var list = Assembly.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes())
.Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof (MyAbstractClass)));
यह काम किया लेकिन केवल Test1Class
पाया गया (क्योंकि - मुझे लगता है - इसे उसी विधानसभा में रखा गया है जहां ऊपर दिए गए कोड को निष्पादित किया गया है?)। मुझे नहीं पता कि मेरे पूरे ऐप में सभी असेंबली के भीतर सभी व्युत्पन्न वर्ग को कैसे खोजना है।
मैंने भी कोशिश की है:
var list = Assembly.GetAssembly(typeof(MyAbstractClass)).GetTypes()
.Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof (MyAbstractClass)));
लेकिन यह मुझे एक खाली संग्रह देता है ...
2 जवाब
आपको यह सुनिश्चित करने की आवश्यकता है कि जब आप Assembly.CurrentDomain.GetAssemblies()
कॉल करते हैं, तो वे सभी असेंबली जिन्हें आप पहले से लोड करना चाहते हैं; असेंबली लोड हो जाती है जब रनटाइम की आवश्यकता होती है (यानी जब आपका प्रोग्राम आपके कोड में एक बिंदु तक पहुंचता है जो उस असेंबली का "उपयोग" करता है, या यदि आप विशेष रूप से {{एक्स 1}} या {एक्स 2}} या जिस भी विधि का उपयोग कर सकते हैं उसे कॉल करते हैं। स्पष्ट रूप से इसे लोड करने के लिए
समस्या CurrentDomain.GetAssemblies () केवल आपके अनुप्रयोग डोमेन में लोड की गई असेंबली को सूचीबद्ध करती है। यदि आप अपने आवेदन में सभी विधानसभाओं में प्रकार प्राप्त करना चाहते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है (किसी तरह) कि सभी विधानसभाएं भरी हुई हैं।
कोड को निम्न पंक्ति का उपयोग करने के लिए विधानसभाओं को मैन्युअल रूप से लोड करने का एक तरीका है:
var assembly = Assembly.LoadFile(@filename)
आपको प्रत्येक फ़ाइल के लिए उपरोक्त करने की आवश्यकता होगी, और फिर आप CurrentDomain.GetAssemblies () विधि का उपयोग कर सकते हैं।
संबंधित सवाल
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।