لماذا مجموعة بسيطة وينق تولد VerificationException: عملية قد يزعزع استقرار وقت التشغيل
-
20-08-2019 - |
سؤال
وبسيطة جدا: مشغل في 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;
}
ويذهب الرقم!
لا تنتمي إلى StackOverflow