MSDNで概説されてAssembly.GetCallingAssembly()
いるJITインライン化による動作の変化を示す短いC#スニペットを作成しようとしています。これまでの私のコードは次のとおりです。
class Program
{
static void Main(string[] args)
{
Console.WriteLine( GetAssembly().FullName );
Console.ReadLine();
}
static Assembly GetAssembly()
{
return System.Reflection.Assembly.GetCallingAssembly();
}
}
これを「リリース」に組み込み、「デバッグなしで開始」を使用し始めます。このセットアップにより、この回答からのコードがインライン化されました。私が見る結果は
ConsoleApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
明らかに、にGetAssembly()
インライン化されていませんMain()
。そうでない場合はmscorlib
、呼び出し元のアセンブリと見なされます。
すべてのインライン化基準を確認しましたが、なぜインライン化されないのかわかりませんGetAssembly()
。
なぜJITコンパイラが呼び出しをインライン化しないことにしたのかを正確に知ることはどういうわけか可能ですか?