2012-10-03 77 views
5

我有我使用LoadFrom加載上下文這樣在互操作場景中使用從本機代碼WPF組件:WPF資源加載在LoadFrom加載上下文失敗

AppDomain.CreateInstanceFrom("c:\mydlls\mywpfstuff.dll", "myclass") 

注意mydlls不是文件夾相同可執行文件所在的位置。這適用於我也加載的常規非ui .NET dll,但是當我嘗試執行此操作時出現錯誤。我附加了AppDomain.CurrentDomain.AssemblyResolve事件處理程序,並獲取無法加載的事件。 ResolveEventArgs中的名稱是「mywpfstuff.resources」,RequestingAssembly是空的。我沒有名爲「mywpfstuff.resources」的文件,無法弄清楚如何做這個程序集來解決我自己。

觸發錯誤的代碼行是InitializeComponent();調用我的主要用戶控件構造函數。

在我看來,內部XAML(BAML?)機制試圖加載一些資源,但使用標準的Load上下文而不是LoadFrom上下文。

是否有任何解決此問題的方法,最好是通過獲取WPF使用LoadFrom上下文或如果這是不可能的如何手動執行程序集解析?

+0

你在'mywpfstuff'項目,名稱'Resources.resx'文件(可能在'屬性文件夾)?如果是這樣的話,它有什麼'Build Action'? – SHSE

+0

我不太確定 - 你會看到很多dll-s在使用AssemblyResolve時嘗試加載(以我的經驗)。你還有什麼要補充你的項目 - 什麼是'myclass'? – NSGaga

+0

當請求mywpfstuff.resources時,是否嘗試從您的事件處理程序返回mywpfstuff程序集? – mgronber

回答

0

由於本地化問題和缺失的resx,我在過去有類似的問題。

如果XAML使用資源,從組裝,仔細檢查是在適當的子文件夾的Ç實際可用的UI的文化資源:\ mydlls

0

我創建此Unused References – VS2010 Add-in – top to bottom時有類似的情況。

問題是資源已經加載,並且無法重新加載其他資源。

希望這有助於...

我創建了一個Start方法來訪問:

public static void Start() 
{ 
    if (Application.Current == null) 
    { 
     // create the Application object 
     App a = new App(); 
     var l = a.Resources["Locator"] as Locator; 
     // do something with l 
     a.Run(); 
    } 
    else 
    { 
     var locator = new Locator(); 
     // do something with l 
     Application.Current.Resources.Remove("Locator"); 
     Application.Current.Resources.Add("Locator", locator); 
     MainWindow main = new MainWindow(); 
     main.Show(); 
    } 
}