将Prism与WPF结合使用,我希望允许用户从存储库中选择他们想要使用的模块。每个模块本质上都是一个附加组件,选择要使用的模块只需将其移动到DLL的“模块”文件夹中即可加载。
但是,在尝试在应用程序运行时移动DLL时,会抛出错误,因为此时DLL正在使用中。你如何解决这个问题并允许用户随意添加/删除模块?
答案 0 :(得分:5)
将程序集加载到AppDomain
后,在AppDomain
被拆除之前不会(不能)卸载....我猜这是你的问题。
如果你在网上看,有一些技巧可以解决这个问题.....
创建一个额外的AppDomain
然后您可以将程序集加载到....完成后,只需调用Unload
关闭AppDomain
,这将释放程序集。
但是,您想要从其他AppDomains
访问的类型必须从MarshalByRefObject
派生,以便您的对象可以远程使用....并且可以编组来自其他AppDomains的调用。
这里有一个非常有趣的技术....它首先将程序集加载到MemoryStream
,然后它从.NET MemoryStream
加载.NET ...这意味着“文件”在磁盘上,没有锁定。