程序集——Assembly

作者:追风剑情 发布于:2016-7-15 17:55 分类:C#

示例:动态加载dll并调用其方法

DllLib.dll

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace DllLib
  7. {
  8. public class Class1
  9. {
  10. public static void Show1()
  11. {
  12. Console.WriteLine("Class1 static Show1");
  13. }
  14.  
  15. public void Show2()
  16. {
  17. Console.WriteLine("Class1 Show2");
  18. }
  19. }
  20.  
  21. public class Class2
  22. {
  23. public static void Show1()
  24. {
  25. Console.WriteLine("Class2 static Show1");
  26. }
  27.  
  28. public void Show2()
  29. {
  30. Console.WriteLine("Class2 Show2");
  31. }
  32. }
  33. }


测试类

  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Reflection;
  7.  
  8. namespace AssemblyTest1
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. //加载程序集
  15. Assembly assembly;
  16. byte[] rawAssembly = loadFile("DllLib.dll");
  17. //如果调试文件存在
  18. if (File.Exists("DllLib.pdb"))
  19. {
  20. byte[] rawSymbolStore = loadFile("DllLib.pdb");
  21. assembly = Assembly.Load(rawAssembly, rawSymbolStore);
  22. }
  23. else
  24. {
  25. assembly = Assembly.Load(rawAssembly);
  26. }
  27. Type type1 = assembly.GetType("DllLib.Class1");//这里要填FullName
  28. //调用静态方法
  29. MethodInfo mi = type1.GetMethod("Show1", BindingFlags.Static | BindingFlags.Public);
  30. mi.Invoke(null, null);
  31. //调用实例方法
  32. mi = type1.GetMethod("Show2", BindingFlags.Instance | BindingFlags.Public);
  33. //创建实例的两种方式
  34. //Activator.CreateInstance(type1)
  35. //assembly.CreateInstance("DllLib.Class1")
  36. mi.Invoke(Activator.CreateInstance(type1), null);//通常用这种方式创建实例对象
  37. mi.Invoke(assembly.CreateInstance("DllLib.Class1"), null);
  38. Console.Read();
  39.  
  40. }
  41.  
  42. static byte[] loadFile(string filename)
  43. {
  44. FileStream fs = new FileStream(filename, FileMode.Open);
  45. byte[] buffer = new byte[(int)fs.Length];
  46. fs.Read(buffer, 0, buffer.Length);
  47. fs.Close();
  48.  
  49. return buffer;
  50. }
  51. }
  52. }

 

运行测试

22222.png

标签: C#

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号