特殊な目的で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
です。
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ファイルの目的は何ですか? を参照してください。