web-dev-qa-db-ja.com

ngen.exeでコンパイルする方法と生成されたネイティブコードを実行する方法

特殊な目的でngenコマンドラインを使用してC#プログラムをコンパイルしたい。そこで、VS2010でコンソールアプリケーションを作成し、ngentestという名前を付けました。 ngentest.vshost.exeという名前のファイルがvs2010\projects\ngentest\bin\debugに作成されます。次のように、このファイルをVS2010コマンドプロンプトのngenコマンド引数として使用しました。

ngen "c:\documents\vs2010\projects\ngentest\bin\debug\ngentest.vshost.exe"

しかし、これを行うと、PublicKeyTokenを受け取ることができず、どこにもアセンブリを見つけることができませんでした。アセンブリが作成された場合、どこにありますか?そして、どうやってそれを見つけることができますか?出力を取得するためにそれをどのように実行できますか(コマンドまたは...!)

それ以外の場合、VSの[ビルド]メニューからbuild ngenを使用してプロジェクトをビルドすると、上記のディレクトリにいくつかのファイルが作成され、そのうちの1つはngentest.exeです。

13
Azad

C#コードをコンパイルすると、ILアセンブリにコンパイルされます。そして、NGENはILアセンブリを入力として受け取り、アセンブリとその依存関係をネイティブイメージキャッシュにインストールします。

バイナリの例では、管理VSコマンドプロンプトを開き、次のように入力する必要があります。

ngen install ngentest.exe

これにより、exeおよびその依存関係dllファイルがネイティブイメージキャッシュにインストールされます。ここでアセンブリにファイル名を使用します。

次に、exeを実行すると、.NETランタイムがネイティブイメージキャッシュにインストールされているネイティブイメージをロードして実行します。 .NETでネイティブイメージを実行するために追加の手順を実行する必要はありません。ランタイムは、ネイティブイメージキャッシュをチェックして、ILアセンブリに有効なネイティブイメージがあるかどうかを確認します。

次のコマンドを入力して、ネイティブイメージがインストールされていることを確認できます。

ngen display ngentest

この場合、アセンブリ名を使用する必要があります。 32ビットngenは、32ビットアセンブリと64ビットngenのみ64ビットアセンブリのみをインストールして表示することに注意してください。

ネイティブイメージの読み込みの詳細については、 http://blogs.msdn.com/b/junfeng/archive/2007/02/18/native-image-loading.aspx を参照してください。

Ngentest.vhost.exeは、デバッグのエクスペリエンスを向上させるためにVSによって作成されたアーティファクトです。 VSで使用されます。あなたはそれをNGENまたはそれに関して何かのために使うべきではありません。詳細については、質問 vshost.exeファイルの目的は何ですか? を参照してください。

21
m_eric