Por que a matriz simples e Linq gerar VerificationException: Operação poderia desestabilizar o tempo de execução
-
20-08-2019 - |
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?
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!