次の方法で共有


アセンブリ バインディング ログ ビューア (Fuslogvw.exe)

ローカライズされたリソースを使用するときの最も困難な作業の 1 つは、ローカライズされたリソースの読み込みプロセスをデバッグすることです。ResourceManager を使用している場合、リソース要求は共通言語ランタイムに渡されます。共通言語ランタイムは、そのリソースの場所の特定、読み込み、およびバインドを行います。リソースを読み込むためにソース コードから 1 回の呼び出しを行うだけで、共通言語ランタイムに対して多数のバインド要求が実行されることがあります。

アセンブリ バインディング ログ ビューアは、リソースの読み込みプロセスを分析するのに役立ちます。リソース バインドに関する詳細情報は、実際には Windows の WinInet コンポーネントによって URL ごとに保持されます。しかし、WinInet によって返されるエントリは、時間順に並べられているとは限りません。

既定では、バインディング呼び出しはログに記録されません。ログの記録を有効にするには、最初に Windows レジストリの HKLM\Software\Microsoft\Fusion キーに DWORD 値を作成する必要があります。ログの最初のレベルには、失敗したリソース バインドだけが表示されます。これを有効にするには、LogResourceBinds DWORD 値を作成し、その値を既定の 0 以外の値に設定します。

サンプル アプリケーションでリソース バインドを失敗させてみるには、適切なリソース サテライト アセンブリを削除するか、その名前を変更するだけです。たとえば、\en-US\Graphic.resources.dll と \en\Graphic.resources.dll の両方を削除してから Graphic サンプルを実行すると、FusLogVW は次の図のようなログを生成します。

これら 2 つのログ エントリのうち、最初のエントリは、共通言語ランタイムが en-US カルチャのリソースを見つけようとしていることを示します。そのリソースが見つからないと、ランタイムは次に en カルチャのリソースを読み込もうとします。en リソースも見つからない場合は、最終的にメイン リソースからリソースが読み込まれます。これには成功するため、ログは記録されません。

しかし、多くの開発者は、バインディングのログ記録をすべて確認したいと考えます。その場合は、ForceLogDWORD 値を既定の 0 以外の値に設定します。この値を設定すると、以降のバインド呼び出しについて、成功と失敗の両方がログに記録されるようになります。典型的なログの例を次の図に示します。

リソースのバインドのいずれか (この場合は Locale=en-US) を選択し、[View Log] をクリックすると、ブラウザ ウィンドウが開き、次のような詳細ログが表示されます。

この図のログ エントリは、共通言語ランタイムがグローバル アセンブリ キャッシュ (GAC) とアプリケーション サブディレクトリを検索した後で、リソースが正常に読み込まれたことを示しています。共通言語ランタイムは、読み込もうとしているファイル数を減らし、パフォーマンスを向上させるために、拡張子が .dll であるファイルについてだけリソースを検索します。