virtualCERCall MDA

virtualCERCallإدارة التصحيح assهوtant (MDA) هو تنشيطه كتحذير تشير إلى أن موقع اتصال داخل رسم مكالمة (CER) لمنطقة تنفيذ مقيدة يشير إلى هدف ظاهري، التي هو، استدعاء ظاهري لأسلوب ظاهري غير نهائي أو اتصال باستخدام واجهة. وقت تشغيل اللغة العامة (CLR) لا يمكن التنبؤ بأسلوب وجهة هذه المكالمات من لغة المتوسطة و تحليل بيانات التعريف فقط. ونتيجة لذلك، شجرة الاستدعاء لا كن كجزء من الرسم البياني CER و لا يمكن تجميدها إحباط مسار التنفيذ في شجرة فرعية هذه بشكل تلقائي. Th MDA هو يحذر من الحالات الموقع قد تحتاج CER لإلحاق باستخدام استدعاءات صريح إلى PrepareMethodأسلوب مرة المعلومات الإضافى المطلوبة لحساب هدف استدعاء هو المعروفة في وقت التشغيل.

الأعراض

CERs لا تعمل عند قيام مؤشر ترابط هو إحباط أو في مجال تطبيق هو لم يتم إلغاء تحميله.

السبب

يتضمن CER مكالمة مع ظاهري أسلوب التي لا يمكن تحضير تلقائياً.

الدقة

قم باستدعاء PrepareMethodلأسلوب ظاهري.

التأثير تشغيل وقت التشغيل

MDA هذا أي تأثير تشغيل CLR.

الإخراج

Method 'MethodWithCer', while executing within a constrained execution region, makes a call
at IL offset 0x0024 to 'VirtualMethod', which is virtual and cannot be prepared automatically
at compile time. The caller must ensure this method is prepared explicitly at
runtime before entering the constrained execution region.
method name="VirtualMethod"
declaringType name="VirtualCERCall+MyClass"
  declaringModule name="mda"
    callsite name="MethodWithCer" offset="0x0024"

التكوين

<mdaConfig>
  <assistants>
    < VirtualCERCall />
  </assistants>
</mdaConfig>

مثال

class MyClass
{
    [ReliabilityContract(Consistency.MayCorruptProcess, CER.None)]
    virtual void VirtualMethod()
    {
        ...
    }
}

class MyDerivedClass : MyClass
{
    [ReliabilityContract(Consistency.MayCorruptProcess, CER.None)]
    override void VirtualMethod()
    {
        ...
    }
}

void MethodWithCer(MyClass object)
{
    RuntimeHelpers.PrepareConstrainedRegions();
    try
    {
        ...
    }
    finally
    {
        // Start of the CER.

        // Cannot tell at analysis time whether object is a MyClass
        // or a MyDerivedClass, so we do not know which version of 
        // VirtualMethod we are going to call.
        object.VirtualMethod();
    }
}

راجع أيضًا:

المرجع

MarshalAsAttribute

المبادئ

تشخيص الأخطاء مع المساعدين التصحيح مدارة

تنظيم إمكانية التشغيل المتداخل