Por que a matriz simples e Linq gerar VerificationException: Operação poderia desestabilizar o tempo de execução

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

Pergunta

Um muito simples: operador em C #, combinada com uma matriz simples e LINQ (para objetos) chamada para trás () é, aparentemente, o suficiente para causar a exceção "System.Security.VerificationException:. Operação poderia desestabilizar o tempo de execução" quando executado em um site ASP.NET em execução com "High" confiança (note que "Full" é o padrão)

Aqui está o código, além da solução simples que eu vim com:

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();
    }
}

Para definir o nível de confiança para "High", o seguinte deve ser adicionado ao arquivo web.config:

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

A solução é uma funcionalidade equivalente à problemática: operador que repros o problema. Meu palpite de ler posts relacionados é este é um erro compilador C #. Alguém sabe o que está acontecendo aqui?

Foi útil?

Solução

Esta linha não tem o problema:

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

Outras dicas

Descobri que a alteração da ordem de trabalhos de expressão em torno da questão assim:

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

Go figura!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top