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

C# 将.dll加载到单独的应用程序域(MEF),c#,.net,dll,mef,C#,.net,Dll,Mef,我正在尝试将程序集加载到单独的应用程序域中。 我不想创建任何实例或执行程序集。所以我没有使用CreateInstanceAndUnwrap方法。我只想加载dll文件(不从中创建任何类型等等) 插件是dll文件的相对路径 。/../Extensions/Plugins\MyAssembly.dll 这将抛出“System.IO.FileNotFoundException” 路径是正确的,如果我使用Assembly.LoadFrom(plugin),它不会抛出任何异常,因此我猜不是路径不正确 其他解

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

插件是dll文件的相对路径

。/../Extensions/Plugins\MyAssembly.dll

这将抛出“System.IO.FileNotFoundException” 路径是正确的,如果我使用
Assembly.LoadFrom(plugin)
,它不会抛出任何异常,因此我猜不是路径不正确

其他解决方案都使用了
CreateInstanceAndUnwrap
,但是如果程序集及其类型对我来说是黑盒呢?我知道它需要一个接口,就这样


这样行吗?但是,我的方法的签名与
CrossAppDomainDelegate
MEF中的一个签名不匹配,MEF更多的是关于可扩展性的,看起来您实际上在寻找[MAF]。看看这个。根据我个人的经验,如果你的插件要调用一些本机代码(例如与硬件交互),AppDomains将无法防止崩溃。托管这样的插件更安全。

您想实现什么,我的意思是,为什么需要将程序集加载到单独的域中?因为它是一个插件,所以我希望将它加载到单独的域中,因为如果插件崩溃,主应用程序不会,因为它位于不同的域中。
        var cat = new AggregateCatalog();
        pluginApplicationDomain = AppDomain.CreateDomain("pluginApplicationDomain", AppDomain.CurrentDomain.Evidence,
        appDomainInfo);

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