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文件中获取,如下图:

C#动态加载DLL程序集及使用反射创建实例-简记_第1张图片

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

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;

 

你可能感兴趣的:(C#相关,Asp.net,WebForm,Asp.net,MVC,c#,Assembly,反射,程序集)