【问题标题】:Plugin architecture in .net: unloading.net 中的插件架构:卸载
【发布时间】:2010-03-12 01:04:48
【问题描述】:

我需要在 c#/.net 中实现一个插件架构才能加载

  • 自定义用户定义操作
  • 自定义数据网格/转换/...的数据类型处理代码...

来自非静态链接的程序集文件。

由于应用程序必须处理许多个自定义用户定义的操作,我需要在执行后卸载它们以减少内存使用。

我发现了几篇关于插件架构的好文章,例如:

但是他们都没有给我足够的香肠来正确卸载程序集。

由于程序将被分发并且用户定义的操作(如名称所示)是用户定义的:我如何防止程序集执行恶意代码(例如关闭我的程序、删除文件)?

你们中的任何一个人还遇到过其他陷阱吗?

【问题讨论】:

  • 那么,您的应用程序的单个实例将运行足够长的时间让您担心内存使用情况?因为最简单的方法是等到应用程序退出。如果应用程序永不退出,效果就不太好了!
  • 以及我正在开发客户端服务器架构,至少服务器应该运行很长时间(至少我希望如此:-)
  • +1 用于在您的问题中使用“香肠”!

标签: c# .net plugins


【解决方案1】:

您是否考虑过使用 MS 的插件和可扩展性框架? http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

迈克尔

【讨论】:

  • @John:托管插件框架使用 AppDomains 来实现插件架构,是的,它将处理卸载。虽然要写很多代码,但它确实是从代码中抽象出 AppDomain 逻辑的好方法。
  • 谢谢,看起来正是我需要的!
【解决方案2】:

一种技术是将附加程序集加载到单独的 AppDomain 中。卸载 AppDomain 将卸载程序集。

【讨论】:

  • 新 AppDomain 中的这些附加程序集将如何与主 AppDomain 中的内容进行对话?
  • 看看DoCallBack是否对你有帮助,但总的来说,RTFM
【解决方案3】:

您不能卸载单个程序集。您只能通过卸载它们所属的 AppDomain 来卸载一组程序集。

这本质上就是 SQL CLR 和 ASP.NET 的工作方式——通过为用户提供的程序集提供一个瞬态 AppDomain。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2011-06-09
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多