2 एम्बेडेड डीएलएस कैसे लोड करें?

मेरे पास दो डीएलएस ( xNet.dll और ag.dll ) हैं, जिन्हें मैं अपने प्रोजेक्ट में उपयोग करना चाहता हूं।

मैं उन्हें रिसोर्स में जोड़ता हूं, ने कहा कि बिल्डिंग एक्शन एम्बेडेड रिसोर्स है। अगला मेरे पास पहला डीएल लोड करने के लिए ऐसा कोड है:

public Form1()
{
    AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve;
    InitializeComponent();
}

private static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
{
    Assembly assembly = Assembly.GetExecutingAssembly();

    string assemblyName = args.Name.Split(',')[0];

    using (Stream stream = assembly.GetManifestResourceStream("Yandex.dll.xNet.dll"))
    {
        if (stream == null)
            return null;

        byte[] rawAssembly = new byte[stream.Length];
        stream.Read(rawAssembly, 0, (int)stream.Length);
        return Assembly.Load(rawAssembly);
    }
}

दूसरा डीएलएल कैसे लोड करें?

0

2 उत्तर

डीएलएल को अस्थायी पथ में क्यों निकालें और फिर उन्हें लोड न करें। मान लें कि आपके पास दो डीएल हैं, अर्थात् firstDll और secondDll दोनों संसाधनों के लिए कार्रवाई सेट बनाते हैं।

फिर उन डीएल को एक अस्थायी पथ में निकालें, इस तरह;

byte[] firstAssembly=Properties.Resources.firstDll;
File.WriteAllBytes(@"C:\Temp\firstDll.dll",firstAssembly);

byte[] secondAssembly=Properties.Resources.secondDll;
File.WriteAllBytes(@"C:\Temp\secondDll.dll",secondAssembly);

इसके बाद उन संयोजनों को लोड करने और उनके साथ काम करने के लिए प्रतिबिंब का उपयोग करें।

0
जोड़ा

आपको अनुरोधित असेंबली नाम से मेल खाना चाहिए और सही असेंबली वापस करनी चाहिए।

मैं आपके असेंबली नामों को नहीं जानता इसलिए मैं केवल एक बहुत ही सरल मिलान कर रहा हूं लेकिन इसे कुछ ऐसा दिखना चाहिए:

private static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.Name.Contains("xNet"))
    {
        return LoadAssemblyFromResource("Yandex.dll.xNet.dll");
    } 

    if (args.Name.Contains("ag"))
    {
        return LoadAssemblyFromResource("ag.dll");
    }

    return null;
}

private static Assembly LoadAssemblyFromResource(string resourceName)
{
    Assembly assembly = Assembly.GetExecutingAssembly();

    using (Stream stream = assembly.GetManifestResourceStream(resourceName))
    {
        if (stream == null)
            return null;

        byte[] rawAssembly = new byte[stream.Length];
        stream.Read(rawAssembly, 0, (int)stream.Length);
        return Assembly.Load(rawAssembly);
    }
}
0
जोड़ा