我试图将程序集加载到单独的应用程序域中。 我不想创建任何实例或执行程序集。所以我没有使用 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
的签名不匹配
答案 0 :(得分:4)
MEF更多的是关于可扩展性,看起来你实际上正在寻找[MAF] 1。看看这个SO question。根据我的个人经验,如果你的插件要调用一些本机代码(例如与硬件交互),AppDomains将不会阻止崩溃。在separate processes中托管此类插件更安全。