WPF资源加载在LoadFrom加载上下文失败
问题描述:
我有我使用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上下文或如果这是不可能的如何手动执行程序集解析?
答
由于本地化问题和缺失的resx,我在过去有类似的问题。
如果XAML使用资源,从组装,仔细检查是在适当的子文件夹的Ç实际可用的UI的文化资源:\ mydlls。
答
我创建此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();
}
}
你在'mywpfstuff'项目,名称'Resources.resx'文件(可能在'属性文件夹)?如果是这样的话,它有什么'Build Action'? – SHSE
我不太确定 - 你会看到很多dll-s在使用AssemblyResolve时尝试加载(以我的经验)。你还有什么要补充你的项目 - 什么是'myclass'? – NSGaga
当请求mywpfstuff.resources时,是否尝试从您的事件处理程序返回mywpfstuff程序集? – mgronber