DllHelper.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 = Game.Scene.GetComponent<ResourcesComponent>().GetAsset<GameObject>("code", "Code");
  17. byte[] assBytes = code.Get<TextAsset>("Hotfix.dll").bytes;
  18. byte[] mdbBytes = code.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 = Game.Scene.GetComponent<ResourcesComponent>().GetAsset<GameObject>("code", "Code");
  29. byte[] assBytes = code.Get<TextAsset>("Hotfix.dll").bytes;
  30. byte[] mdbBytes = code.Get<TextAsset>("Hotfix.mdb").bytes;
  31. Assembly assembly = Assembly.Load(assBytes, mdbBytes);
  32. return assembly;
  33. }
  34. #endif
  35. public static Type[] GetHotfixTypes()
  36. {
  37. #if ILRuntime
  38. ILRuntime.Runtime.Enviorment.AppDomain appDomain = Init.Instance.AppDomain;
  39. if (appDomain == null)
  40. {
  41. return new Type[0];
  42. }
  43. return appDomain.LoadedTypes.Values.Select(x => x.ReflectionType).ToArray();
  44. #else
  45. if (ObjectEvents.Instance.HotfixAssembly == null)
  46. {
  47. return new Type[0];
  48. }
  49. return ObjectEvents.Instance.HotfixAssembly.GetTypes();
  50. #endif
  51. }
  52. public static Type[] GetMonoTypes()
  53. {
  54. List<Type> types = new List<Type>();
  55. foreach (Assembly assembly in ObjectEvents.Instance.GetAll())
  56. {
  57. types.AddRange(assembly.GetTypes());
  58. }
  59. return types.ToArray();
  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. }