CIL をマシン固有のアセンブリに変換することは、ある程度可能です。
Marc Gravell はコメントで Mono AOT について言及していますが、これは 1 つのオプションです。Mono AOTページに記載されているように、完全な AOT (ランタイム IL 解釈をまったく使用しない) を使用する場合、できることとできないことにいくつかの制限があります。それ以外の場合は、機械語に変換できる IL があり、残りは実行時に通常どおりに解釈されます。
また、C# でオペレーティング システム全体を作成するCosmos プロジェクトによって作成され、Cosmos プロジェクトのために作成された IL2CPUもあります。ホスティング オペレーティング システムがなければ、.NET Framework も存在せず、IL をマシン コードに変換する以外に選択肢はほとんどありません。IL2CPU にも限界がありますが、完全なリストは知りません。
しかし、結局のところ、大部分の .NET プログラムにとって利点はほとんどありません。プログラムの実行速度が大幅に向上せず、プログラムのデバッグが困難になり (プログラムまたは IL トランスレータにバグがあるか?)、インストールに .NET Framework 自体の一部が含まれてしまう場合は、セキュリティ アップデートそれらのビットのコピーには適用しないでください。ですから、自分が何をしているのか本当にわかっていない限り、それをしないでください。