我的应用程序在项目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);
}
接口实现分两部分实现:
正确加载实现接口的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事件处理程序搜索插件目录,但不存在该名称),并且我的窗口显示时没有在其资源字典中指定样式。
我到目前为止尝试过的东西:
[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)]
。使用Satellite,MainAssembly尝试,但没有指定属性。在Assemblysolve调用之后,Satellite会引发抛出,MainAssembly导致不调用AssemblyResolve,而不指定它会导致调用AssemblyResolve。我知道在这种情况下,我可以将颜色值硬编码到WPF窗口中来解决问题,但是在将来,我们将拥有各种资源,本地化,皮肤等,所以我想我现在应该解决问题。
我尽可能地描述了这个问题。如果您有任何疑问,我一定会回复。
谢谢!
链接:
The plugin implementation can be found here at code.google.com/the-dargon-project/
The addin manager/assembly resolver can be found here at code.google.com/the-dargon-project/
答案 0 :(得分:0)
我项目中经验丰富的WPF经历了我的代码,结果发现我在App.xaml中加载了resourcedictionary(这似乎是WPF应用程序的入口点)。但是,当您将WPF项目作为插件加载并实例化其中一个类(这很有意义)时,不会调用该入口点,因此未加载资源字典。他通过移动来解决问题
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Simple Styles.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
从App.xaml到BasicProgressUIWindow.xaml.cs
窗口现在可以正确加载其样式配置资源。然而,失败的装配结果仍然发生,我们正在试图弄清楚它们应该是什么意思。