C# の非常に単純な ?: 演算子と、単純な配列および LINQ (オブジェクトへの) 呼び出しを組み合わせた Reverse() は、「System.Security.VerificationException: Operation could destabilize the runtime.」という例外を引き起こすのに明らかに十分です。「高」信頼で実行されている ASP.NET Web サイトで実行する場合 (「完全」がデフォルトであることに注意してください)
これがコードと、私が思いついた簡単な回避策です。
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=""/>
回避策は、問題を再現する問題のある ?: 演算子と同等の機能です。関連する投稿を読んだ私の推測では、これは C# コンパイラのバグです。ここで何が起こっているか知っている人はいますか?