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 Files\ReferencedAssemblies\theAssemblyName.dll");
string name = assembly.FullName;

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值