CLRに関するウィキペディアの記事の次の段落を読みました。
または、ネイティブイメージジェネレーター(NGEN)を使用して、実行前に別の手順でCILコードをネイティブコードにコンパイルすることもできます。これにより、CILからネイティブへのコンパイルが不要になるため、ソフトウェアの以降のすべての実行が高速化されます。
これは、任意の.NETプログラムを取得してバイナリにコンパイルし、.NET Frameworkがインストールされていないマシンで実行できることを意味しますか?
いいえ。
これは、コードを実行するときにJIT(Just-In-Time)コンパイラを実行する必要がないことを意味します。これは、NGenによってすでにマシンコードに変換されているためです。結果のバイナリは引き続き.NetFrameworkに依存しているため、これをマシンに個別にインストールする必要があります。
.Net Frameworkアセンブリをパッケージ化し、.NetFrameworkが不要な方法でバイナリに含めるツールがあります。http://www.xenocode.com/をチェックしてください。VMWareは、Thinstallというツールを購入しました。これも可能だと思います:http ://www.vmware.com/products/thinapp/ 。
NgenのMSDNページを読んでください。
Ngen.exeは、コンパイルされたプロセッサ固有のマシンコードを含むファイルであるネイティブイメージを作成し、それらをローカルコンピュータのネイティブイメージキャッシュにインストールします。ランタイムは、ジャストインタイム(JIT)コンパイラを使用して元のアセンブリをコンパイルする代わりに、キャッシュからのネイティブイメージを使用できます。
(私にとって)Ngenは、JITコンパイラが実行することを実行し、結果を保存することを意味します。バイナリに.NETランタイムを含めることについては何も述べていません。
「NGen」はコードをコンパイルするだけです。.NETFramework全体を静的にリンクするわけではありません。
ただし、Monoには、これを実行できる静的コンパイラとリンカがあります。これは、たとえば、MonoのiPhoneサポートがどのように機能するかです。