首页 / 知识
关于Windows:如何在.NET中加载插件?
2023-04-12 09:43:00

How to load plugins in .NET?
我想提供一些在软件中创建可动态加载的插件的方法。 我的问题是如何在C#/。Net应用程序中动态加载插件? 从.NET 3.5开始,有一种形式化的嵌入式方法可以从.NET应用程序创建和加载插件。全部在System.AddIn命名空间中。有关更多信息,您可以在MSDN上查看本文:加载项和可扩展性
以下代码段(C#)构造了一个从
编辑:Matt引用的类在.NET 3.5中可能是更好的选择。 动态加载插件
有关如何动态加载.NET程序集的信息,请参见此问题(以及我的回答)。这是一些用于加载创建
卸载插件
插件框架的典型要求是卸载插件。要卸载动态加载的程序集(例如插件和加载项),您必须卸载包含的 使用WCF 有一个堆栈溢出问题和答案,描述了如何使用Windows Communication Framework(WCF)创建插件框架。 现有的插件框架 我知道两个插件框架:
有人谈论托管扩展框架(MEF)作为插件或加载项框架,但事实并非如此。有关更多信息,请参见此StackOverflow.com问题和此StackOverflow.com问题。 一个提示是将所有插件等加载到自己的AppDomain中,因为运行的代码可能具有恶意性。自己的AppDomain也可以用于"过滤"您不想加载的程序集和类型。
并将程序集加载到应用程序域中:
卸载应用程序域:
是的,对Matt和System.AddIn ++(这是有关MSDN的关于System.AddIn的两部分文章,请参见此处和此处)。您可能希望了解的另一种技术,以了解.NET Framework将来的发展方向是Codeplex上当前以CTP形式提供的Managed Extensibility Framework。 基本上,您可以通过两种方式做到这一点。 第一种是导入kernel32.dll并使用之前使用的LoadLibrary和GetProcAddress:
第二种是通过.NET方式进行操作:使用反射。检查System.Reflection命名空间和以下方法:
首先,通过程序集的路径加载程序集,然后通过其名称从其获取类型(类),然后再次通过其名称获取该类的方法,最后使用相关参数调用该方法。 本文较旧,但仍适用于在应用程序中创建可扩展性层: 允许用户使用宏和插件向您的.NET应用程序添加功能 这是我的实现,受此代码启发,避免迭代所有程序集和所有类型(或至少使用linQ进行过滤)。我只是加载该库,然后尝试加载实现一个通用共享接口的类。简单快速:) 只需在一个单独的库中声明一个接口,然后在您的系统和插件中都引用它:
在您的插件库中,声明一个实现IYourInterface的类
在您的系统中,声明此方法
并这样称呼它:
|
最新内容
相关内容
python有map方法吗
python有map方法吗,培训,位置,数据,函数,列表,序列,参数,元素,方法,使用方法,python中的map:map()会根据提供的函数对指定序列做映射。第一个pythonid函数如何运行
pythonid函数如何运行,培训,地址,代码,对象,函数,内存,类型,可能会,整数,字符串,id(object)功能:返回的是对象的“身份证号”,唯一且不变,但在不pythonmap函数怎么显示结果
pythonmap函数怎么显示结果,培训,代码,数字,函数,结果,序列,元素,参数,可能会,惰性,map()函数接收两个参数,一个是函数,一个是Iterable,map将传python如何安装第三方函数库
python如何安装第三方函数库,工具,在线,培训,情况,管理系统,名字,管理,命令,函数库,脚本,python安装第三方库有两种方式:1.使用pip命令行工具pythonstr函数怎么使用
pythonstr函数怎么使用,培训,字符串,函数,字典,列表,参数,整数,形式,类型,示例,str函数是Python的内置函数,它将参数转换成字符串类型,即人适合pythonpython是函数式语言吗
pythonpython是函数式语言吗,培训,代码,函数,概念,指数,状态,语言,变量,计算机,程度,函数是Python内建支持的一种封装,我们通过把大段代码拆成python有哪些方法可以解压文件?
python有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大。python函数与方法的区别是什么
python函数与方法的区别是什么,培训,函数,方法,区别,对象,以上,方式,更多,内容,python中函数和方法的区别1、函数要手动传self,方法不用传selpython定义函数不带括号吗
python定义函数不带括号吗,培训,代码,函数,名称,情况,括号,定义,圆括号,自变量,参数,python定义函数带不带括号:函数能提高应用的模块性,和代码python函数、类的区别
python函数、类的区别,数据,代码,培训,公用,设计,名称,变量,函数,实例,方法,python函数、类的区别:函数是组织好的,可重复使用的,用来实现单一,或python类自带方法吗
python类自带方法吗,培训,方法,里面,实例,也就是说,下面,对象,以上,之后,参数,python中的类,创建好之后,里面是没有方法的,也就是说,类并没有自带python带有yield的函数在Python中
python带有yield的函数在Python中如何使用,培训,异常,函数,生成器,结果,表达式,后边,语句,场景,关键字,yield的函数在Python中的使用yield在