繁体   English   中英

为什么AppDomain与使用MEF实现的插件管理器相关

[英]Why is an AppDomain relevant to a plugin manager implemented with MEF

我用MEF和FileSystemWatcher编写了一个简单的插件管理器类,用于自动刷新插件,但是我听到有人说,要能够动态添加和删除程序集(插件),我们还需要使用AppDomain。

谁能指导我何时需要一起使用AppDomain和MEF(尤其是在我的插件管理器方案中)?

它们之间是什么关系?

简而言之,当您要覆盖应用程序正在使用的.dll时,需要一个AppDomain,并且该AppDomain必须指定ShadowCopyFiles = "true"

卷影复制文件意味着AppDomain将.dll复制到一个临时目录并从该临时目录加载它们,以便可以覆盖原始.dll。

不幸的是,除非卸载包含它们的AppDomain,否则无法卸载加载到任何AppDomain中的程序集。

考虑到这一点,刷新插件很困难,因为您必须A)卸载整个AppDomain,这必然会卸载该AppDomain中的所有其他.dll,或者B)允许加载同一.dll的新版本,从而增加内存您的应用程序的足迹。 第二个选项还要求您的插件.dll具有强名称,并使用不同的版本号,以便MEF识别差异并加载新的.dll。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM