ngenは、.NETコードをCODEの実行時にインストールする必要がないバイナリに.NETコードをコンパイルするために使用されますか?

StackOverflow https://stackoverflow.com/questions/3173116

  •  02-10-2019
  •  | 
  •  

質問

Wikipediaの記事に関する次の段落をCLRについて読みました。

あるいは、CILコードは、ネイティブ画像ジェネレーター(NGEN)を使用して、ランタイムの前に別のステップでネイティブコードにコンパイルすることができます。これにより、CILからネイティブのコンピレーションが不要になったため、ソフトウェアの後のすべての実行が高速化されます。

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

役に立ちましたか?

解決

いいえ。

これは、コードを実行するときにJIT(Just-in-Time)コンパイラを実行する必要がないことを意味します。これは、ngenによってマシンコードに既に変換されているためです。結果のバイナリはまだ.NETフレームワークに依存しており、これはマシンに個別にインストールする必要があります。

.NETフレームワークアセンブリをパッケージ化し、.NETフレームワークが必要ない方法でバイナリにそれらを含めるツールがあります。チェックアウト http://www.xenocode.com/. 。 VMwareはThinStallというツールを購入しましたが、これもこれを行うことができると思います。 http://www.vmware.com/products/thinapp/.

他のヒント

読んで MSDNページ それが記載されているngenの場合:

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

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

「ngen」はコードをコンパイルするだけです。 .NETフレームワーク全体を静的にリンクしません。

ただし、 します これを行うことができる静的コンパイラとリンカーがあります。これは、たとえば、MonoのiPhoneサポートの仕組みです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top