将.dll加载到单独的应用程序域(MEF)

时间:2015-02-16 08:20:54

标签: c# .net dll mef

我试图将程序集加载到单独的应用程序域中。 我不想创建任何实例或执行程序集。所以我没有使用 CreateInstanceAndUnwrap 方法。我只是想加载dll文件(不是从它创建任何类型等)。

        var cat = new AggregateCatalog();
        pluginApplicationDomain = AppDomain.CreateDomain("pluginApplicationDomain", AppDomain.CurrentDomain.Evidence,
        appDomainInfo);

        cat.Catalogs.Add(new AssemblyCatalog(pluginApplicationDomain.Load(File.ReadAllBytes(plugin))));

和插件是dll文件的相对路径。

../../扩展/插件\ MyAssembly.dll程序

这会引发' System.IO.FileNotFoundException ' 路径是正确的,如果我Assembly.LoadFrom(plugin),它不会抛出任何异常,所以我猜测它不是错误的路径。

其他解决方案全部使用CreateInstanceAndUnwrap,但是如果程序集及其类型对我来说是黑盒子怎么办?我知道这对一个界面是不可取的,那就是它?

Load dll into another domain exception

这会有用吗?但是,我的方法签名与CrossAppDomainDelegate

的签名不匹配

1 个答案:

答案 0 :(得分:4)

MEF更多的是关于可扩展性,看起来你实际上正在寻找[MAF] 1。看看这个SO question。根据我的个人经验,如果你的插件要调用一些本机代码(例如与硬件交互),AppDomains将不会阻止崩溃。在separate processes中托管此类插件更安全。