2013-09-01 70 views
0

創建用戶控件當我加載組件(xxx.dll)進入新的AppDomain,並試圖在其中創建用戶控件,出現異常:無法裏面新的AppDomain

Could not load file or assembly 'xxx.resources' or one of its dependencies. 

當我的程序集加載到主要的AppDomain它的工作原理精細。
爲什麼會發生異常?

public void InitializeComponent() { 
if (_contentLoaded) { 
     return; 
} 
_contentLoaded = true; 

//這裏發生異常

System.Uri resourceLocater = new System.Uri("/Company.AddInApp;component/controls/usercontrol.xaml", System.UriKind.Relative); 

#line 1 "..\..\..\Controls\UserControl1.xaml" stem.Windows.Application.LoadComponent(this, resourceLocater); 
#line default 
#line hidden 
} 
+0

SOS傢伙...需要幫助.... – Developer

+0

你應該融合日誌查看器調試此 - http://www.hanselman.com/blog/BackToBasicsUsingFusionLogViewerToDebugObscureLoaderErrors.aspx – YK1

+0

「融合日誌」對我說什麼都沒有,它只是顯示在搜索路徑(AppDomain基本目錄)中丟失了哪些程序集。 ((( – Developer

回答

0

我已經發現的錯誤:

var setup = new AppDomainSetup 
{ 
     ApplicationBase = rootAddInsPath, 
     ........ 
}; 
var appDomain = AppDomain.CreateDomain(...) 

//I don't must do this here!!! 
appDomain.AssemblyResolve += (sender, args) => 
{ 
    .... 
} 

var managerType = typeof(AddInLoadManager); 
var manager =(AddInLoadManager)appDomain.CreateInstanceAndUnwrap(managerType.Assembly.FullName, managerType.FullName); 

正確的位置爲 「AppDomain.AssemblyResolve」 事件是 「AddInLoadManager」 內類。

感謝您的幫助@ YK1