C# 构建MAF管道时自定义程序集解析

C# 构建MAF管道时自定义程序集解析,c#,.net,appdomain,maf,system.addin,C#,.net,Appdomain,Maf,System.addin,我正在开发一个需要支持插件不同程度隔离的系统。我选择了MAF,因为它符合我的需要,支持单独的进程隔离和现成的AppDomain隔离 以下示例使用单独的过程隔离: AddInStore.Rebuild(path); ... var ap = new AddInProcess(); ap.Start(); var addin = token.Activate<MyAddInBase>(ap, AddInSecurityLevel.FullTrust); 参考资料呢 My.MainApp

我正在开发一个需要支持插件不同程度隔离的系统。我选择了MAF,因为它符合我的需要,支持单独的进程隔离和现成的AppDomain隔离

以下示例使用单独的过程隔离:

AddInStore.Rebuild(path);
...
var ap = new AddInProcess();
ap.Start();
var addin = token.Activate<MyAddInBase>(ap, AddInSecurityLevel.FullTrust);
参考资料呢

My.MainApp                  <- My.AddIn.Hosting     (copy local = true)

My.AddIn.Hosting            <- My.AddIn.Shared      (copy local = true)
                            <- My.AddIn.Contract    (copy local = false)

My.PlugIn.AddIn             <- My.AddIn.Contract    (copy local = false)

My.PlugIn.HostSideAdapter   <- My.AddIn.Hosting     (copy local = false)
                            <- My.AddIn.Contract    (copy local = false)

My.PlugIn.PlugInSideAdapter <- My.PlugIn.AddIn      (copy local = false)
                            <- My.AddIn.Contract    (copy local = false)

My.SamplePlugin             <- My.PlugIn.AddIn      (copy local = false)
                            <- My.AddIn.Contract    (copy local = false)
调用AddInStore.Rebuild之前,但这只影响我的主机应用正在运行的域,不影响由内部创建的dommain“外接程序模型发现工作程序AD” System.AddIn.Hosting.AddInStore

由于该类是静态的,所以无法重写域的创建。此外,它不提供任何允许我访问内部域以解决错误的事件。
有没有办法注入我的自定义程序集解析规则或强制内部appDomain从我的主appDomain继承解析事件?

您确定引用正确吗?
主机
不应引用
主机侧适配器
。也就是说,如果您想支持任何向后兼容性的概念,那么管道中的共享程序集将产生问题。如果您的加载项和主机都引用相同的程序集,那么您将无法独立地对它们进行版本设置。您是对的,我在文章中弄乱了引用列表,并引入了libs之间的循环。我已经核实了参考资料并更新了问题。托管和加载项不需要合同参考资料。插件绝对不应该引用合同。管道布局的全部要点是将主机从对管道的太多了解中抽象出来,并将插件从对管道的太多了解中抽象出来。在执行此操作时,您可以独立地对每个适配器进行版本设置,只需更新适配器以支持向后兼容性。通过让插件知道合同货币,你打破了这一点。谢谢,看起来我没有理解系统背后的原则。Addin正确。我会修改我的推荐信。非常感谢。
My.MainApp                  <- My.AddIn.Hosting     (copy local = true)

My.AddIn.Hosting            <- My.AddIn.Shared      (copy local = true)
                            <- My.AddIn.Contract    (copy local = false)

My.PlugIn.AddIn             <- My.AddIn.Contract    (copy local = false)

My.PlugIn.HostSideAdapter   <- My.AddIn.Hosting     (copy local = false)
                            <- My.AddIn.Contract    (copy local = false)

My.PlugIn.PlugInSideAdapter <- My.PlugIn.AddIn      (copy local = false)
                            <- My.AddIn.Contract    (copy local = false)

My.SamplePlugin             <- My.PlugIn.AddIn      (copy local = false)
                            <- My.AddIn.Contract    (copy local = false)
My.AddIn.Shared     <- My.AddIn.Contract    (copy local = false)

My.AddIn.Hosting    <- My.AddIn.Shared      (copy local = false)

My.PlugIn.AddIn     <- My.AddIn.Shared      (copy local = false)
AppDomain.CurrentDomain.AssemblyResolve
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve