栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

C#动态加载DLL程序集及使用反射创建实例-简记

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#动态加载DLL程序集及使用反射创建实例-简记

Assembly动态加载程序集:

分两种情况:

1、需要加载的程序集已经在程序中被引用了,则直接从当前程序域中查找即可:

Assembly assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x => x.GetName().Name.Contains("theAssemblyName"));

 

2、需要加载的程序集未被加载,则使用程序集名称加载:

 方法一,需要具体程序集的一些必要信息,如下:

Assembly assembly = Assembly.Load(@"theAssemblyName, Version=55.0.0.0, Culture=neutral, PublicKeyToken=ef0f902af9dee505");

说明:theAssemblyName:为程序集的名称,Version:为程序集的版本,Culture:一般默认使用neutral,PublicKeyToken:为程序集的唯一标识ID,没有;上述信息可以在程序集项目中 AssemblyInfo.cs文件中获取,如下图:

   方法二,通过程序集文件路径加载,只加载程序集文件,不加载程序集依赖的其它程序集,如下:

Assembly assembly = Assembly.LoadFile(具体路径+ "DynamicReferenceDLL.dll")

 

方法三,通过程序集文件路径加载,同时将此程序集所依赖的程序集也加载进来,如下:

Assembly assembly = Assembly.LoadFrom(具体路径+ "DynamicReferenceDLL.dll")

 

 

 

使用反射创建实例:
 //获取程序集中指定的类类型,参数为:命名空间.类型名
 var type = assembly.GetType("DynamicReferenceDLL.MyMath");

 //创建实例,方法一
 //var obj = Activator.CreateInstance(type); 

 //创建实例,方法二  ,参数为:命名空间.类型名    
 var obj = assembly.CreateInstance("DynamicReferenceDLL.MyMath");

 //获取实例中的方法
 var method = type.GetMethod("Sum");

 //调用实例方法
 object result=method.Invoke(obj, new object[] { 1, 2 });

 Console.WriteLine(result);

如何获取程序集的文件的PublicKeyToken,Culture,Version:

Assembly assembly = Assembly.LoadFile(@"C:Program FilesReferencedAssembliestheAssemblyName.dll");
string name = assembly.FullName;

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/979848.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号