Warum einfaches Array und Linq erzeugen VerificationException: Operation konnte die Laufzeit destabilisieren
-
20-08-2019 - |
Frage
Ein sehr einfach:? Operator in C #, kombiniert mit einer einfachen Anordnung und LINQ (to Objects) () aufrufen, um Reverse ist offenbar genug, um die Ausnahme zu verursachen "System.Security.VerificationException. Der Betrieb konnte die Laufzeit destabilisieren" wenn auf einer ASP.NET-Website läuft mit „High“ Vertrauen läuft (beachten Sie, dass „Full“ ist die Standardeinstellung)
Hier ist der Code, sowie die einfache Abhilfe, die ich kam mit:
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();
}
}
Um das Vertrauen Pegel „High“ zu, muss Folgendes in die web.config-Datei hinzugefügt werden:
<trust level="High" originUrl=""/>
Die Abhilfe ist Funktionalität entspricht den problematisch: Operator, der das Problem Repros. Meine Vermutung von verwandten Beiträge zu lesen ist dies ist ein C # Compiler-Fehler. Wer weiß, was hier vor sich geht?
Lösung
Diese Zeile hat nicht das Problem:
return test ? widgets.AsEnumerable() : widgets.Reverse();
Andere Tipps
Ich fand, dass die Reihenfolge des Ausdrucks ändert das Thema arbeitet um auch:
private IEnumerable<string> Workaround() {
bool test = true;
string[] widgets = new string[0];
return !test ? widgets.Reverse() : widgets;
}
Go figure!