有无论如何都有可以加载/卸载的ClassLibrary插件。我发现的唯一方法是使用AppDomain,但由于插件无法使用主机API,因此失败了。C#加载/卸载插件
3
A
回答
3
是的我用1.1 2.0和3.5做了这个。另外MS现在有MEF,这可能是你想要的。
1
当你说“插件无法使用主机API,”你的意思是你需要你的插件来访问他们的主机的代码?如果是这样,那听起来就像是想要一个循环依赖,这是不允许的,不管你的代码是否可动态加载/不加载。如果插件需要访问主机的API,你应该提取接口的是API,并把它放在一个共享库,这两个插件和主机应用程序可以访问:
Plugin -> PluginLib <- Host
然后主机可以注入其API对象插入到插件的属性/构造函数中,以便插件可以调用API方法。理想情况下,你的插件库不应该依赖主机库。解决依赖问题后,使用AppDomain进行动态加载/卸载应该没问题。
1
CLR只能卸载整个AppDomain,而不是程序集。但是,在多个应用程序域中加载相同的程序集没有问题。
这意味着您可以将程序集A中的类型实例注入到装入程序集B的新AppDomain中.B然后可以使用程序集A中的实例与主AppDomain进行交谈。只要你不从组件B'通过边界'传递任何类型,你就可以卸载appdomain并从内存中移除组件B.
看看在MarshalByRefObject约传球情况下对应用程序域边界
更多信息相关问题
- 1. C#卸载事件
- 2. 如何卸载IE插件
- 3. 如何卸载FireBreath插件
- 4. 卸载Eclipse插件错误
- 5. 卸载Apache Geronimo Eclipse插件?
- 6. 如何卸载sysdeo插件
- 7. 卸载主应用程序时卸载插件
- 8. MEF插件在程序执行期间加载和卸载
- 9. MEF - 通知何时加载/卸载插件
- 10. 如何动态地加载和卸载TinyMCE插件
- 11. golang:如何卸载已经加载的“go插件”1.8
- 12. 脚本仍在加载卸载的插件?
- 13. 卸载加载Headjs的JS文件
- 14. 防止卸载控件动态加载
- 15. 加载和卸载图像
- 16. 卸载MS Word加载项
- 17. 卸载类加载器
- 18. 加载和卸载uiviewcontrollers
- 19. 加载/卸载利用加载外部文件
- 20. 卸载组件
- 21. 卸载Firefox添加
- 22. 为什么不卸载类加载器就不能卸载类?
- 23. 加载/卸载与C#问题的C DLL
- 24. 如何从Jenkins(Hudson)卸载插件?
- 25. 无法卸载VS10的SpecFlow插件
- 26. 从eclipse中卸载和删除插件
- 27. 如何在eclipse中卸载插件?
- 28. 从Eclipse Galileo卸载Oracle WebLogic插件
- 29. 从Aptana Studio 3卸载插件?
- 30. 如何从Eclipse Galileo 3.5卸载插件?
你能解释一下你所说的“插件无法使用主机API。”是什么意思? – Jacob 2011-05-16 20:28:41
如果插件引用了主机,那么当您将其加载到另一个AppDomain中时,我假设它再次在该AppDomain中加载主机,因为没有设置任何内容。 – Will 2011-05-16 20:34:58