لماذا مجموعة بسيطة وينق تولد VerificationException: عملية قد يزعزع استقرار وقت التشغيل

StackOverflow https://stackoverflow.com/questions/478422

سؤال

وبسيطة جدا: مشغل في C #، جنبا إلى جنب مع مجموعة بسيطة وLINQ (إلى كائنات) الدعوة إلى عكسي () على ما يبدو كافيا ليسبب استثناء "System.Security.VerificationException: عملية قد يزعزع استقرار التشغيل." عند تشغيل على موقع ويب ASP.NET تعمل مع الثقة "عالية" (لاحظ أن "كامل" هو الافتراضي)

وهنا هو رمز، بالإضافة إلى الحل بسيط أن خطرت لي:

protected void Page_Load(object sender, EventArgs e) {
    Repro();
    //Workaround();
}

private IEnumerable<string> Repro() {
    bool test = true;
    string[] widgets = new string[0];
    return test ? widgets : widgets.Reverse();
}

private IEnumerable<string> Workaround() {
    bool test = true;
    string[] widgets = new string[0];
    if (test) {
        return widgets;
    } else {
        return widgets.Reverse();
    }
}

لتعيين مستوى الثقة إلى "عالية"، يجب إضافة ما يلي إلى ملف web.config:

<trust level="High" originUrl=""/>

والحل هو وظيفة أي ما يعادل إشكالية: المشغل أن repros المشكلة. تخميني من القراءة الوظائف ذات الصلة وهذا هو الخلل C # مترجم. أحد يعرف ما الذي يحدث هنا؟

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

المحلول

وليس لديها هذا الخط المشكلة:

return test ? widgets.AsEnumerable() : widgets.Reverse();

نصائح أخرى

ولقد وجدت أن تغيير ترتيب التعبير يعمل حول هذه المسألة أيضا:

private IEnumerable<string> Workaround() {
    bool test = true;
    string[] widgets = new string[0];
    return !test ? widgets.Reverse() : widgets;
}

ويذهب الرقم!

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