2012-10-03 95 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(); 
    } 
} 
相关问题