2011-01-28 37 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版本,但仍然受着AssemblyResolve變化documented爲.NET V4.0:

重要從.NET Framework 4開始,ResolveEventHandler事件引發適用於所有組件,包括 資源組件。在較早的版本中,不會爲 資源組件提出該事件。如果操作系統已本地化,則可能會多次調用處理程序 :對於後備 鏈中的每個區域,都會執行一次。

我們解決這個問題的方法是檢查e.Name並查看它是否正在查找* .Resources.dll。如果該文件未在AppDomain或已知文件夾中找到,我們將刪除「.Resources」並查找* .dll。如果該文件存在,我們加載並返回該程序集。這解決了我們的問題。