3

CLRに関するウィキペディアの記事の次の段落を読みました。

または、ネイティブイメージジェネレーター(NGEN)を使用して、実行前に別の手順でCILコードをネイティブコードにコンパイルすることもできます。これにより、CILからネイティブへのコンパイルが不要になるため、ソフトウェアの以降のすべての実行が高速化されます。

これは、任意の.NETプログラムを取得してバイナリにコンパイルし、.NET Frameworkがインストールされていないマシンで実行できることを意味しますか?

4

3 に答える 3

5

いいえ。

これは、コードを実行するときにJIT(Just-In-Time)コンパイラを実行する必要がないことを意味します。これは、NGenによってすでにマシンコードに変換されているためです。結果のバイナリは引き続き.NetFrameworkに依存しているため、これをマシンに個別にインストールする必要があります。

.Net Frameworkアセンブリをパッケージ化し、.NetFrameworkが不要な方法でバイナリに含めるツールがあります。http://www.xenocode.com/をチェックしてください。VMWareは、Thinstallというツールを購入しました。これも可能だと思います:http ://www.vmware.com/products/thinapp/ 。

于 2010-07-03T23:05:00.310 に答える
2

NgenのMSDNページを読んでください。

Ngen.exeは、コンパイルされたプロセッサ固有のマシンコードを含むファイルであるネイティブイメージを作成し、それらをローカルコンピュータのネイティブイメージキャッシュにインストールします。ランタイムは、ジャストインタイム(JIT)コンパイラを使用して元のアセンブリをコンパイルする代わりに、キャッシュからのネイティブイメージを使用できます。

(私にとって)Ngenは、JITコンパイラが実行することを実行し、結果を保存することを意味します。バイナリに.NETランタイムを含めることについては何も述べていません。

于 2010-07-03T23:04:52.807 に答える
2

「NGen」はコードをコンパイルするだけです。.NETFramework全体を静的にリンクするわけではありません。

ただし、Monoには、これを実行できる静的コンパイラとリンカがあります。これは、たとえば、MonoのiPhoneサポートがどのように機能するかです。

于 2010-07-03T23:07:08.640 に答える