アセンブリを NGEN する場合とそうでない場合のパフォーマンスへの影響を測定しようとしていますが、実行可能ファイルに NGEN アセンブリをロードさせることができません。VS2010 コマンド プロンプトから次のコマンドを実行しました。
ngen install MyApp.exe
これは問題なく完了し、すべての依存関係アセンブリが C:\Windows\assembly\NativeImages_v4.0.30319_32\MyCompanyName# ディレクトリに作成されていることを確認しました。
その後、アプリを起動して Process Explorer を見ると、NativeImages_x フォルダーから *.ni.dll ファイルを読み込むのではなく、ローカル バイナリ ディレクトリからすべてのアセンブリを読み込んでいました。fuslogvw を使用してバインディングをログに記録しました。サンプル ログ エントリは次のとおりです。
*** Assembly Binder Log Entry (6/29/2011 @ 10:14:04 AM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll
Running under executable C:\Path\To\My\Binaries\MyCompanyName.MyApp.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = username
LOG: DisplayName = MyCompanyName.MyAssembly, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Path/To/My/Binaries/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MyCompanyName.MyApp.exe
Calling assembly : MyCompanyName.AnotherAssembly, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null.
===
LOG: Start binding of native image MyCompanyName.MyAssembly, Version=1.0.2.0, Culture=neutral, PublicKeyToken=null.
WRN: No matching native image found.
LOG: IL assembly loaded from C:\Path\To\My\Binaries\MyCompanyName.MyAssembly.dll
ここで何が起こっているのかについて考えている人はいますか?問題のネイティブ アセンブリが次の場所に存在することを確認しました。
C:\Windows\assembly\NativeImages_v4.0.30319_32\MyCompanyName#\3a041121abf7fbdce89836c32f2d217e\MyCompanyName.MyAssembly.ni.dll
正しくバインドされていないのはなぜですか?FWIW、アプリケーションは MEF をかなり使用します。それがアセンブリの読み込みに影響するかどうかはわかりません。