2015年12月30日水曜日

Fusionログ(実行時のアセンブリのバインドログ)

「Fusionログ」について。

.NETアプリの実行時にアセンブリのバインド情報をログ出しするツール。

CLRによるアセンブリのバインドが失敗するケース(GACやCodeBase、或はルートフォルダに対象のモジュールが存在しない時など)では、CLRからThrowされたTypeLoadExceptionの内容をログ出し出来ていれば、十分解析可能。
が、例外はThrowされないんだけど、

  • 意図したバージョンのモジュールをバインドできているか?
  • 間接的に意図していないモジュールをバインドしていないか?
といった確認には使えるかも。

【事前準備】
「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion」のキーに以下の要素を追加する。

名前 : 「ForceLog」
種類 : 「REG_DWORD」
値  : 「1」

名前 : 「LogPath」
種類 : 「REG_SZ」 ※文字列型
値  : 「C:\FusionLogs」 ※ログの出力先ディレクトリのパス



【使い方】
対象のアプリを実行するのみ。
CLRによるアセンブリのバインドのタイミングで「LogPath」に指定されたディレクトリにFusionログが出力される。ログの形式はHTML。


【出力例】 ※ASP .NET


*** アセンブリ バインド ログ エントリ  (2015/12/30 @ 10:44:54) ***

操作に成功しました。
バインド結果: hr = 0x0. この操作を正しく終了しました。

アセンブリ マネージャーの読み込み元: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
実行可能ファイル下で実行しています。 C:\Program Files (x86)\IIS Express\iisexpress.exe
--- 詳細エラー ログは以下のとおりです。

=== 事前バインド状態情報 ===
ログ: DisplayName = MvcApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
 (Fully-specified)
ログ: Appbase = file:///C:/dev/sampleproject/trunk/MvcApplication2/MvcApplication2/
ログ: Initial PrivatePath = C:\dev\sampleproject\trunk\MvcApplication2\MvcApplication2\bin
・・・






【ログの確認方法】
「LogPath」に出力されるHTMLを個別に眺めても良いが出力されたログファイルを確認するためのツールがあるのでこれを利用する。


 Fuslogvw.exe (Assembly Binding Log Viewer)


上記ツールはVisualStudioインストール時に自動でインストールされる。
VisualStudioに付属しているDeveloper Command Promptにて、以下のコマンドを管理者権限で実行すると起動できる。


fuslogvw

 

 





[参考資料]




0 件のコメント:

コメントを投稿