WPF+MAF - 不加载加载项引用的库



我是加载项框架的新手。现在我正在尝试创建返回UserControl的WPF插件(根据 https://msdn.microsoft.com/en-us/library/bb909849(v=vs.110).aspx)。

问题是当我尝试从插件获取用户控制权时,会抛出异常:

  1. 第一个例外是"找不到名为 '' 的资源。资源名称区分大小写。所有资源都存储在单独的库中,当我对 MEF 做同样的事情时(在 MAF 之前)它工作正常

  2. 好的,我已经从我的UserControl中删除了所有静态资源,然后我得到了另一个异常:"{"无法加载文件或程序集'Infralution.Localization.Wpf,PublicKeyToken=547ccae517a004b5'或其依赖项之一。此库用于本地化。

注意:所有需要的库都与插件位于同一文件夹中

插件引用的库没有加载吗?还是我错在哪里?

我发现当一个插件被激活时,它的Application.Current是空的。早些时候我没有向每个窗口添加资源,但每个插件库都包含带有资源的 App.xaml 文件。因此,项目的编译是成功的,VS WPF 设计器工作正常,当我使用 MEF(在一个应用程序域中)时它工作正常。但是,正如我所说,当我尝试 MAF 时,addins 没有应用程序当前实例,所以它根本没有资源。

现在,为了使每个 AddIn 都使用主机应用程序的样式,我创建了合约:

public interface IThemeContract : IContract
{
    /// <summary>
    /// Theme name
    /// </summary>
    string Name { get; }
    /// <summary>
    /// Theme description
    /// </summary>
    string Description { get; }
    /// <summary>
    /// Array of expected resources dictionaries
    /// </summary>
    IListContract<string> ResourceDictionaries { get; }
}

主机应用程序序列化其所有资源;一段 HostAdapter:

    System.AddIn.Contract.IListContract<string> IThemeContract.ResourceDictionaries
    {
        get
        {
            var list = new List<string>();
            foreach (var s in _view.ResourceDictionaries)
            {
                list.Add(XamlWriter.Save(s));
            }
            return CollectionAdapters.ToIListContract<string>(list);
        }
    }

并将其发送给 addins;然后 addins 对其进行反序列化;一段 AddInAdapter:

    public override System.Windows.ResourceDictionary[] ResourceDictionaries
    {
        get
        {
            var strings = CollectionAdapters.ToIList<string>(_contract.ResourceDictionaries);
            var rds = new List<System.Windows.ResourceDictionary>();
            foreach (var s in strings)
            {
                var output = XamlReader.Parse(s);
                if ((output as System.Windows.ResourceDictionary) != null)
                    rds.Add(output as System.Windows.ResourceDictionary);
            }
            return rds.ToArray();
        }
    }

然后应用程序看起来像一个单元。

相关内容

  • 没有找到相关文章

最新更新