DllHelper.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reflection;
  6. using ILRuntime.CLR.Method;
  7. using ILRuntime.CLR.TypeSystem;
  8. using UnityEngine;
  9. namespace Model
  10. {
  11. public static class DllHelper
  12. {
  13. #if ILRuntime
  14. public static void LoadHotfixAssembly()
  15. {
  16. GameObject code = (GameObject)Resources.Load("Code");
  17. byte[] assBytes = code.GetComponent<ReferenceCollector>().Get<TextAsset>("Hotfix.dll").bytes;
  18. byte[] mdbBytes = code.GetComponent<ReferenceCollector>().Get<TextAsset>("Hotfix.pdb").bytes;
  19. using (MemoryStream fs = new MemoryStream(assBytes))
  20. using (MemoryStream p = new MemoryStream(mdbBytes))
  21. {
  22. Init.Instance.AppDomain.LoadAssembly(fs, p, new Mono.Cecil.Pdb.PdbReaderProvider());
  23. }
  24. }
  25. #else
  26. public static Assembly LoadHotfixAssembly()
  27. {
  28. GameObject code = (GameObject)Resources.Load("Code");
  29. byte[] assBytes = code.Get<TextAsset>("Hotfix.dll").bytes;
  30. byte[] mdbBytes = code.Get<TextAsset>("Hotfix.pdb").bytes;
  31. Assembly assembly = Assembly.Load(assBytes, mdbBytes);
  32. return assembly;
  33. }
  34. #endif
  35. private static List<Type> _typeBuffer = new List<Type>();
  36. public static Type[] GetHotfixTypes()
  37. {
  38. #if ILRuntime
  39. ILRuntime.Runtime.Enviorment.AppDomain appDomain = Init.Instance.AppDomain;
  40. if (appDomain == null)
  41. {
  42. return new Type[0];
  43. }
  44. foreach (IType type in appDomain.LoadedTypes.Values.ToArray())
  45. {
  46. if (!_typeBuffer.Contains(type.ReflectionType))
  47. {
  48. _typeBuffer.Add(type.ReflectionType);
  49. }
  50. }
  51. return _typeBuffer.ToArray();
  52. #else
  53. return ObjectEvents.Instance.Get("Hotfix").GetTypes();
  54. #endif
  55. }
  56. public static Type[] GetMonoTypes()
  57. {
  58. Assembly model = ObjectEvents.Instance.Get("Model");
  59. return model.GetTypes();
  60. }
  61. #if ILRuntime
  62. public static IMethod[] GetMethodInfo(string typeName)
  63. {
  64. ILRuntime.Runtime.Enviorment.AppDomain appDomain = Init.Instance.AppDomain;
  65. if (appDomain == null)
  66. {
  67. return new IMethod[0];
  68. }
  69. return appDomain.GetType(typeName).GetMethods().ToArray();
  70. }
  71. public static IType GetType(string typeName)
  72. {
  73. return Init.Instance.AppDomain.GetType(typeName);
  74. }
  75. #endif
  76. }
  77. }