我试图在我的 MEF 插件目录中停止我的应用程序锁定 DLL,以便我可以在运行时覆盖程序集(注意我实际上并没有试图让 MEF 即时重新加载它们,在下一个应用程序启动时很好,我只是不想停止应用程序进行复制)
我试图通过为我的 mef 加载的程序集创建一个影子复制的应用程序域来做到这一点,如下所示:
[Serializable]
public class Composer:IComposer
{
private readonly string _pluginPath;
public Composer(IConfigurePluginDirectory pluginDirectoryConfig)
{
_pluginPath = pluginDirectoryConfig.Path;
var setup = new AppDomainSetup();
setup.ShadowCopyFiles = "true"; // really??? is bool not good enough for you?
var appDomain = AppDomain.CreateDomain(AppDomain.CurrentDomain.FriendlyName + "_PluginDomain", AppDomain.CurrentDomain.Evidence, setup);
appDomain.DoCallBack(new CrossAppDomainDelegate(DoWorkInShadowCopiedDomain));
}
private void DoWorkInShadowCopiedDomain()
{
// This work will happen in the shadow copied AppDomain.
var catalog = new AggregateCatalog();
var dc = new DirectoryCatalog(_pluginPath);
catalog.Catalogs.Add(dc);
Container = new CompositionContainer(catalog);
}
public CompositionContainer Container { get; private set; }
}
然后通过此类上的 CompositionContainer 访问我的 MEF 组件目录。然而,组合容器似乎只在影子复制域内初始化(这是有道理的),这意味着它在我的应用程序域中为空。我只是想知道是否有更好的方法来执行此操作或某种跨域查询的方法来获取我的 MEF 组件