Warum einfaches Array und Linq erzeugen VerificationException: Operation konnte die Laufzeit destabilisieren

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

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?

War es hilfreich?

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top