سؤال

أقوم بإنشاء نظام إضافي حيث يقوم التطبيق الرئيسي بتحميل التجميعات Addin1.dll و Addin2.dll في وقت التشغيل في AppDomain الجديد.

ومع ذلك، في حالة توقيع Addin1.dll (اسم قوي) بمفتاحي ولم يتم توقيع Addin2.dll، أريد أن أكون قادرًا على تحميل Addin1.dll فقط ورفض Addin2.dll.

أظن أنه يجب القيام بذلك عن طريق تعيين بعض المعلمات في AppDomainSetup؟

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

المحلول

والنظر في في طريقة Assembly.Load التي تأخذ المعلمة الإثبات. يمكنك العثور على مثال على كيفية إنشاء الأدلة من مفتاحك العام <لأ href = "http://msdn.microsoft.com/en-us/library/system.security.policy.evidence.aspx" يختلط = "نوفولو noreferrer "عنوان =" الأدلة فئة "> هنا .

نصائح أخرى

ويمكنك implment على DomainManager وقاعدة الخاص بك القرار تحميل / كتلة على ما تريد. أجبت على السؤال هنا.

يمكنك استخدام طريقة التحميل لفئة AppDomain لتحميل التجميع الجديد إلى Appdomain، بشرط استيفاء سياسة ناشر التجميع من قبل العميل أو بيئة المستخدم النهائي.

كما يتبع التجميع المسمى القوي جميع القواعد التي وضعها ناشر التجميع وCLR.لذلك يحتاج مستخدم التجميع إلى تلبية الجانب الأمني ​​للتجميع الذي يتم تحميله في مجال التطبيق.

يقوم CLR بتحميل التجميع العمومي المشار إليه من GAC باستخدام خصائص الاسم الواضح.إذا كان التجميع المشار إليه متاحًا في GAC، فسيقوم CLR بإرجاع الدليل الفرعي الذي يحتوي عليه ويتم تحميل الملف الذي يحتوي على البيان.إن العثور على التجميع بهذه الطريقة يؤكد للمتصل أن التجميع الذي تم تحميله في وقت التشغيل جاء من نفس الناشر الذي أنشأ التجميع الذي تم تجميع الكود عليه.الآن قم بمقارنة رمز المفتاح العام في جدول AssemblyRef الخاص بالتجميع المرجعي ورمز المفتاح العام في جدول AssemblyDef الخاص بالتجميع المشار إليه.إذا لم يكن التجميع المشار إليه موجودًا في GAC، فسيبحث CLR في الدليل الأساسي للتطبيق ثم في المسارات الخاصة المحددة في ملف تكوين التطبيق؛إذا تم تثبيت التطبيق الذي يحتوي على التجميع باستخدام MSI، فسيقوم CLR باستدعاء MSI لتحميل التجميع المطلوب.إذا لم يتم العثور على التجميع في أي من هذه المواقع، فسيتم طرح استثناء وفي النهاية يفشل ربط التجميع.

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