ILRuntimeCLRBinding.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using System.IO;
  2. using System.Runtime.CompilerServices;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace ET
  6. {
  7. public static class ILRuntimeCLRBinding
  8. {
  9. [MenuItem("Tools/ILRuntime/通过自动分析热更DLL生成CLR绑定")]
  10. private static void GenerateCLRBindingByAnalysis()
  11. {
  12. //用新的分析热更dll调用引用来生成绑定代码
  13. ILRuntime.Runtime.Enviorment.AppDomain domain = new ILRuntime.Runtime.Enviorment.AppDomain();
  14. using (System.IO.FileStream fs = new System.IO.FileStream(Path.Combine(Define.BuildOutputDir, "Code.dll"), System.IO.FileMode.Open,
  15. System.IO.FileAccess.Read))
  16. {
  17. domain.LoadAssembly(fs);
  18. ILHelper.RegisterAdaptor(domain);
  19. ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(domain, "Assets/Mono/ILRuntime/Generate");
  20. }
  21. AssetDatabase.Refresh();
  22. Debug.Log("生成CLR绑定文件完成");
  23. }
  24. [MenuItem("Tools/ILRuntime/生成跨域继承适配器")]
  25. private static void GenerateCrossbindAdapter()
  26. {
  27. //由于跨域继承特殊性太多,自动生成无法实现完全无副作用生成,所以这里提供的代码自动生成主要是给大家生成个初始模版,简化大家的工作
  28. //大多数情况直接使用自动生成的模版即可,如果遇到问题可以手动去修改生成后的文件,因此这里需要大家自行处理是否覆盖的问题
  29. using (System.IO.StreamWriter sw = new System.IO.StreamWriter("Assets/Mono/ILRuntime/ICriticalNotifyCompletionAdapter.cs"))
  30. {
  31. sw.WriteLine(ILRuntime.Runtime.Enviorment.CrossBindingCodeGenerator.GenerateCrossBindingAdapterCode(
  32. typeof (ICriticalNotifyCompletion), "ET"));
  33. }
  34. AssetDatabase.Refresh();
  35. Debug.Log("生成适配器完成");
  36. }
  37. }
  38. }