1

我的应用程序在项目 ProjectNameLib 中定义了一个接口 IProgressUIPlugin,该接口在另一个 DLL 中实现。我的主应用程序直接引用 ProjectNameLib 并在启动时从 /plugins/ 文件夹加载接口实现的程序集。接口已被复制和粘贴,注释和多余的方法被剥离,如下:

public interface IProgressUIPlugin : IApplicationNameExtension
{
   IProgressUIWindow CreateNew();
}

public interface IProgressUIWindow : IDisposable
{
   void Close();
   void Update(string title, string subtitle, string status, double progress);
}

接口实现分两部分实现:

  1. ProjectName.Plugins.BasicProgressUI - 实现 IProgressUIPlugin, IProgressUIWindow
  2. ProjectName.Plugins.BasicProgressUI.Blend - 实际的 WPF 视图和视图模型

实现接口的 DLL 已正确加载,以便我能够调用该方法pluginInstance.CreateNew()。但是,我的程序集解析器随后会尝试解析。

ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null
ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en-US, PublicKeyToken=null
ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=null
ProjectName.Plugins.BasicProgressUI.Blend.resources, Version=1.0.0.0, Culture=en, PublicKeyToken=null

两种解决方案都失败(我的 AssemblyResolve 事件处理程序搜索插件目录,但不存在该名称)并且我的窗口显示时没有在其资源字典中指定样式。

到目前为止我尝试过的东西:

  1. 摆弄着[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)]。尝试使用 Satellite、MainAssembly 并且没有指定属性。在调用 assemblyresolve 后,Satellite 导致抛出,MainAssembly 导致 AssemblyResolve 不被调用,不指定它会导致 AssemblyResolve 被调用。
  2. 当要求 assemblyresolve 解析 .resources 文件时,显式返回 WPF 项目程序集。
  3. 大量的谷歌搜索(诸如“wpf 资源 assemblyresolve”、“assemblyresolve resourcedictionary”等查询)。

我知道对于这种情况,我可以将颜色值硬编码到 WPF 窗口中来解决问题,但在未来,我们将拥有各种资源、本地化、蒙皮等,所以我想我现在应该解决问题。

我已经尽我所能描述了这个问题。如果您有任何问题,我一定会回复。

谢谢!

链接:
插件实现可以在这里找到 code.google.com/the-dargon-project/
插件管理器/程序集解析器可以在这里找到 code.google.com/the-dargon-project/

4

1 回答 1

0

我的项目中有一位 WPF 经验丰富的人浏览了我的代码,结果发现我正在 App.xaml 中加载资源字典(这似乎是 WPF 应用程序的入口点)。但是,当您将 WPF 项目作为插件加载并实例化其中一个类(这很有意义)时,不会调用该入口点,因此没有加载资源字典。他通过搬家解决了问题

<ResourceDictionary>
   <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="Simple Styles.xaml"/>
   </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

从 App.xaml 到 BasicProgressUIWindow.xaml.cs

该窗口现在可以正确加载其样式配置资源。然而,失败的装配解决仍然发生,我们正试图弄清楚它们应该是什么意思。

于 2013-06-09T03:02:56.720 回答