2013-06-03 4 views
9

मैं एक पोर्टेबल लाइब्रेरी प्रोजेक्ट के अंदर वर्तमान ऐप की असेंबली पाने का एक तरीका ढूंढ रहा हूं।क्या पोर्टेबल लाइब्रेरी पर AppDomain.GetAssemblies का कोई विकल्प है?

क्लासिक पुस्तकालय परियोजना में, कोड की रेखा से नीचे काम करते हैं:

var assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); 

लेकिन लगता है कि System.AppDomain पोर्टेबल पुस्तकालय के लिए उपलब्ध नहीं है।

क्या किसी को पोर्टेबल लाइब्रेरी पर वर्तमान डोमेन असेंबली प्राप्त करने का कोई तरीका पता है?

+0

आप तथ्य यह है कि अगर एक वर्ग या विधि पीसीएल में उपलब्ध नहीं है तो यह * बहुत * संभावना नहीं है एक पोर्टेबल विकल्प है कि वहाँ के साथ काम करने की आवश्यकता होगी। उदाहरण के लिए सिल्वरलाइट और विनआरटी ऐप्स में ऐपडोमेन उपलब्ध नहीं है। आप उन लक्ष्यों का उल्लेख करना भूल गए हैं जिन्हें आप समर्थन देना चाहते हैं। लेकिन स्पष्ट रूप से आप पत्थर से पानी को wring नहीं कर सकते हैं, अगर आप चाहते हैं कि लक्ष्य का समर्थन नहीं करता है तो आपके पास एक पुस्तकालय है जो काम नहीं कर सकता है। –

+1

क्या मैं पूछ सकता हूं कि आपको वर्तमान एपडोमेन में सभी असेंबली की सूची पहली बार पीसीएल से क्यों प्राप्त करने की आवश्यकता है? –

+0

क्या आप अधिक जानकारी प्रदान कर सकते हैं? मैंने देखा है कि उपयोग से, वर्तमान एपडोमेन से मौजूदा असेंबली खींचने से यह धारणा मिलती है कि किसी दिए गए एप्लिकेशन में सभी असेंबली पहले ही लोड हो चुकी हैं। –

उत्तर

6

आप मंच हुक का उपयोग कर सकते हैं:

अपने पोर्टेबल पुस्तकालय में:

using System.Collections.Generic; 

namespace PCL { 
    public interface IAppDomain { 
    IList<IAssembly> GetAssemblies(); 
    } 

    public interface IAssembly { 
    string GetName(); 
    } 

    public class AppDomainWrapper { 
    public static IAppDomain Instance { get; set; } 
    } 
} 

और आप उन्हें तरह उपयोग कर सकते हैं (अपने पोर्टेबल पुस्तकालय में):

AppDomainWrapper.Instance.GetAssemblies(); 

अपने platform- में आश्रित आवेदन आपको इसे लागू करने की आवश्यकता होगी:

public class AppDomainWrapperInstance : IAppDomain { 
    IList<IAssembly> GetAssemblies() { 
    var result = new List<IAssembly>(); 
    foreach (var assembly in System.AppDomain.CurrentDomain.GetAssemblies()) { 
     result.Add(new AssemblyWrapper(assembly)); 
    } 
    return result; 
    } 
} 

public class AssemblyWrapper : IAssembly { 
    private Assembly m_Assembly; 
    public AssemblyWrapper(Assembly assembly) { 
    m_Assembly = assembly; 
    } 

    public string GetName() { 
    return m_Assembly.GetName().ToString(); 
    } 
} 

और bootstrap यह

AppDomainWrapper.Instance = new AppDomainWrapperInstance(); 
+2

का डुप्लिकेट यूडब्ल्यूपी पर काम नहीं करता है या ज़मरिन :( – bbqchickenrobot

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