2011-01-28 20 views
6

WPFアプリケーションがあり、イベントAppDomain.AssemblyResolveを購読しています(このイベントは、ランタイムでアセンブリが見つからない場合に発生します)。 MyAssembly.resourcesを解決します。MyAssemblyは現在実行中のアセンブリです。また、MyAssemblyから参照したライブラリアセンブリについても同じことを求めました(Library.resourcesを要求しました)。AssemblyResolveが常に呼び出され、MyAssembly.resourcesを要求します

これは正常ですか?どうすれば修正できますか?私のアプリケーションには問題があります。ライブラリにあるxamlユーザーコントロールを読み込めません。これは関連していますか?

答えて

7

この行をAssemblyInfo.csに追加すると、リゾルバにはリソースが必要になりません。

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)] 

これは回避策ですが、注意して多言語アプリケーションと見なしてください。

詳細:

1

我々はAssemblyResolveイベントハンドラでこの同じ問題に遭遇しました。奇妙なことに、私たちはWindows XPマシンでしか問題を見ていませんでした。私たちのアプリケーションは多くの言語にローカライズされていますので、NeutralResourcesLanguageAttributeを使用することを躊躇していました。私たちのアプリケーションは、.NET V3.5用にコンパイルされたが、それでも.NET v4.0のためのAssemblyResolve変更documentedに影響されました:

重要の.NET Framework 4以降では、ResolveEventHandlerイベントが発生しますすべてのアセンブリに対して、 リソースアセンブリを含めます。以前のバージョンでは、 リソースアセンブリのイベントは発生しませんでした。オペレーティングシステムがローカライズされている場合は、 フォールバックの各カルチャに対して1回、 というハンドラが複数回呼び出されることがあります。

我々はこれを解決する方法はe.Nameをチェックし、それが* .Resources.dllを探していたかどうかを確認することでした。そのファイルがAppDomainまたは既知のフォルダに見つからなかった場合は、 ".Resources"を削除して* .dllを探します。そのファイルが存在する場合は、そのアセンブリをロードして返します。これは私たちの問題を解決しました。

関連する問題