سؤال

هذا السؤال لديه بالفعل إجابة هنا:

كيف يمكنني إخبار تطبيق .NET الخاص بي عن مكان البحث عن مجموعة معينة تحتاجها (بخلاف GAC أو المجلد الذي يعمل فيه التطبيق)؟ على سبيل المثال ، أود أن أضع مجموعة في مجلد مؤقت للمستخدم وأطلب من طلبي أن التجميع المشار إليه موجود في المجلد المؤقت.

شكرًا

هل كانت مفيدة؟

المحلول

يمكنك استخدام ال appdomain.assemblyResolve حدث لإضافة محلول تجميع مخصص. يتيح لك ذلك الإشارة إلى الدلائل الأخرى أو حتى قواعد البيانات للحصول على التجميعات حسب الحاجة.

لقد استخدمت رمزًا مشابهًا لتنزيل التجميعات من قاعدة بيانات وتخزين في ClosedStorage. اسم الملف كجسم لاسم التجميع الكامل. بعد ذلك ، ستحتاج قاعدة البيانات فقط إلى التنزيل في المرة الأولى التي تحل فيها وسيتم تقديم جميع القرارات المستقبلية بواسطة نظام الملفات. الأفضل حول حدث AssemblyResolve هو أنه يمكنك استخدامه type.getType () والمضمنة في مسلسلات.

static string lookupPath = @"c:\otherbin";

static void Main(string[] args)
{
    AppDomain.CurrentDomain.AssemblyResolve += 
        new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}

static Assembly CurrentDomain_AssemblyResolve(object sender, 
                                              ResolveEventArgs args)
{
    var assemblyname = new AssemblyName(args.Name).Name;
    var assemblyFileName = Path.Combine(lookupPath, assemblyname + ".dll");
    var assembly = Assembly.LoadFrom(assemblyFileName);
    return assembly;
}

نصائح أخرى

انظر هذه المناقشة لبعض القضايا المعنية:

http://bytes.com/topic/c-harp/answers/248203-dynamic-assembly-loading

في الأساس ، لا يمكنك تغيير Appbase لـ AppDomain بعد إنشاءه. يجب تحديده كجزء من التكوين قبل إنشاء واحد جديد ، والذي لن يساعدك في AppDomain الافتراضي.

إذا كان التجميع الذي تريد تحميله في دليل أسفل Appbase الحالي ، فيمكنك إضافة مساره النسبي باستخدام AppendPrivatePath (REPONTINGPATH) ، ثم استخدام ASSEMBLY.LOAD - سيقوم Runtime بالتحقيق في الدلائل الفرعية لك. هذه هي أفضل/أسهل طريقة للتعامل معها.

System.Reflection.Assembly.LoadFrom(myFile);

http://msdn.microsoft.com/en-us/library/1009fa28.aspx

بديل آخر هو التعامل مع الأحداث في حل التجميع بنفسك كما في سؤال Stackoverflow: كيفية إضافة مجلد إلى مسار البحث في التجميع في وقت التشغيل في .NET؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top