【问题标题】:Why is an AppDomain relevant to a plugin manager implemented with MEF为什么 AppDomain 与使用 MEF 实现的插件管理器相关
【发布时间】:2016-05-07 09:53:15
【问题描述】:

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

谁能指导我何时需要同时使用 AppDomain 和 MEF(尤其是对于我的插件管理器场景)?

它们之间是什么关系?

【问题讨论】:

    标签: c# mef appdomain


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多