在LoadFrom加载上下文中WPF资源加载失败

时间:2012-10-03 07:35:59

标签: c# wpf xaml assembly-loading

我有一个WPF程序集,我在本地代码的互操作场景中使用LoadFrom加载上下文,如下所示:

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

请注意,mydlls与可执行文件所在的文件夹不同。这适用于我也加载的常规非ui .NET dll,但是当我尝试这样做时,我得到一个错误。我附加了AppDomain.CurrentDomain.AssemblyResolve事件处理程序并获取无法加载的事件。 ResolveEventArgs中的Name是“mywpfstuff.resources”,RequestingAssembly是空的。我没有名为“mywpfstuff.resources”的文件,也无法弄清楚如何解决这个问题。

触发错误的代码行是InitializeComponent();在我的主用户控件构造函数中调用。

在我看来,内部XAML(BAML?)机制试图加载一些资源,但使用标准的Load上下文而不是LoadFrom上下文。

是否有解决此问题的方法,最好是让WPF使用LoadFrom上下文,或者如果不可能如何手动解决程序集?

2 个答案:

答案 0 :(得分:0)

由于本地化问题和缺少resx,我过去遇到过类似的问题。

如果XAML使用该程序集中的资源,请仔细检查UI文化资源是否实际可用于 c:\ mydlls 正确的子文件夹

答案 1 :(得分: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();
    }
}