System.InvalidProgramException
プログラムに無効な MSIL (Microsoft intermediate language) またはメタデータが含まれている場合にスローされる例外。通常、これはプログラムを生成したコンパイラのバグ、とのこと。
非常に興味をそそられたので調査してみたが、断念。KB312544の情報を元に、非常に長い命令文を生成してみた。
[実験ソース(C#)]
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
const int COUNT = 1194; // 1193 まではOK
const string src = @"
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int a = 1;
int b = 0;
int c =
";
using (StreamWriter sw = new StreamWriter("Test.cs"))
{
sw.Write(src);
sw.Write(" ");
for (int i = 0; i < COUNT; i++)
{
sw.Write("(a == 1 ? ");
}
sw.WriteLine();
sw.Write(" ");
sw.WriteLine("a ");
sw.Write(" ");
for (int i = 0; i < COUNT; i++)
{
sw.Write(": b)");
}
sw.WriteLine(";");
sw.WriteLine(" }");
sw.WriteLine(" }");
sw.WriteLine("}");
}
}
}
}
[結果]
コンパイルするには、式が長すぎるか、または複雑すぎます。
(ビルド失敗)
[対処など]
長い三項演算子を作成してみたが、例外を発生させることはできなかった。コンパイルバグだと言っているくらいなので、改修されていて当たり前か・・・