2010-03-12 67 views
5

我需要实现以加载插件架构在.NET:卸载

  • 自定义用户定义的动作C#/净内的插件架构
  • 为定制数据网格/转换
  • 数据类型处理代码/ ...

来自非静态链接汇编文件。

因为应用程序必须处理许多自定义用户定义的操作,所以Iam需要在执行后卸载它们以减少内存使用量。

我发现了几个好文章关于插件体系结构,如:

但没有人给了我足够的香肠进行正确的卸载部件。因为程序是要分发的,用户定义的操作是(作为名称状态)用户定义的:如何防止程序集执行恶意代码(例如,关闭我的程序,删除文件)?

你们其中有人遇到过什么其他的陷阱吗?

+0

所以,你的应用程序的单个实例将运行足够长的时间,你要关心的内存使用情况?因为最简单的方法是等到应用程序退出。如果应用程序永远不会退出,那么效果不佳! – 2010-03-12 01:05:56

+0

以及我正在开发一个客户端服务器架构,至少服务器应该运行很长时间(至少我希望如此:-) – 2010-03-12 07:02:52

+1

+1在你的问题中使用“香肠”! – Eccentropy 2013-07-31 19:59:29

回答

4

你有没有想过使用MS的加载宏和扩展性框架? http://msdn.microsoft.com/en-us/magazine/cc163476.aspx

迈克尔

+0

@Michael:这个框架处理卸载问题吗? – 2010-03-12 01:18:12

+0

@John:托管Addin框架使用AppDomains来实现插件架构,是的,它将处理卸载。虽然有很多代码需要编写,但是它可以从代码中抽取AppDomain逻辑。 – 2010-03-12 01:21:28

+0

谢谢,看起来像我需要的! – 2010-03-12 09:18:53

4

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

+0

新AppDomain中的这些附加程序集将如何与来自主AppDomain的东西进行对话? – BjarkeCK 2014-09-20 16:29:06

+0

看看[DoCallBack](http://msdn.microsoft.com/en-US/library/system.appdomain.docallback.aspx)可以帮助你,但是一般来说,[RTFM](http://msdn.microsoft.com/zh-CN/) COM/EN-US /库/ System.AppDomain.aspx)。 – 2014-09-20 18:21:23

1

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

这实际上就是SQL CLR的工作原理和ASP.NET--通过为用户提供的程序集提供一个瞬态AppDomain。