WPF Prism - 在应用程序中管理模块

时间:2012-10-15 14:54:32

标签: wpf prism

将Prism与WPF结合使用,我希望允许用户从存储库中选择他们想要使用的模块。每个模块本质上都是一个附加组件,选择要使用的模块只需将其移动到DLL的“模块”文件夹中即可加载。

但是,在尝试在应用程序运行时移动DLL时,会抛出错误,因为此时DLL正在使用中。你如何解决这个问题并允许用户随意添加/删除模块?

1 个答案:

答案 0 :(得分:5)

将程序集加载到AppDomain后,在AppDomain被拆除之前不会(不能)卸载....我猜这是你的问题。

如果你在网上看,有一些技巧可以解决这个问题.....

创建其他AppDomain

创建一个额外的AppDomain然后您可以将程序集加载到....完成后,只需调用Unload关闭AppDomain,这将释放程序集。

但是,您想要从其他AppDomains访问的类型必须从MarshalByRefObject派生,以便您的对象可以远程使用....并且可以编组来自其他AppDomains的调用。

将程序集加载到MemoryStream

这里有一个非常有趣的技术....它首先将程序集加载到MemoryStream,然后它从.NET MemoryStream加载.NET ...这意味着“文件”在磁盘上,没有锁定。