我开发了一个基于WPF插件的应用程序,其中插件程序集被动态加载到“主机”应用程序中,主机应用程序及其插件都引用了通用程序集。
如果在将来的某个时候我希望调整一个通用程序集的类,我不想重新编译所有的插件,以便它们可以在一个可能正在运行的主机应用程序中工作不同版本的通用程序集。
情境:
常见:
public class Foo
{
// Some useful properties
}
主机:
public class ViewModelBase<T> where T : Foo
{
// Some useful behaviour
}
插件#1:
public class ViewModel : ViewModelBase<Foo>
{
}
插件#2:
public class ViewModel : ViewModelBase<Foo>
{
}
ISSUE:
加载插件#2后,我收到一个ReflectionTypeLoadException,因为版本1.1.0.0的Foo类不被认为与版本1.2.0.0的Foo类相同,所以使用Foo作为类型参数插件#2中的视图模型无效。
IDEAS:
使用更不可变的“核心”通用程序集来包含Foo类(但最终,这将需要从太多不同的程序集中获取太多类),因此不是一个选项< / EM>
使用程序集重定向(但强制插件使用与主机应用程序相同版本的通用程序集并不能保证在开发期间工作的插件将继续在部署后工作,除非规则被放置确保不使用过时属性引入任何重大更改
有没有人设法得到真正的并排(不要与.NET框架并排)这样的场景(在单个或多个应用程序域中)吗?
非常感谢,
罗布
答案 0 :(得分:0)
我们在Host应用程序的app.config文件中使用程序集重定向来解决此问题。