private static void CommonForBindingCode(Action <AppDomain, string> callback) { ILRuntimeHotFix.InitInEditor(); ILRuntimeAppEditor app = ILRuntimeAppEditor.GetInstance(); AppDomain domain = AppDomain(); string[] strs = Selection.assetGUIDs; foreach (var item in strs) { string path = AssetDatabase.GUIDToAssetPath(item); callback.Invoke(domain, path); } AssetDatabase.Refresh(); }
private static void BindingAll(AppDomain domain, string path) { string generatedRoot = "Assets/Scripts/HotFixGenerated"; string info = string.Format("即将分析并生成热更脚本中的CLR绑定代码,是否继续?\r\n\r\n已选中的热更文件:{0}\r\n\r\n 生成位置:{1}", path, generatedRoot); if (EditorUtility.DisplayDialog("提示", info, "必须的", "我再想想")) { using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read)) { domain.LoadAssembly(fs); ILRuntimeAppEditor app = ILRuntimeAppEditor.GetInstance(); #if DEF_APPLICATION_SETTING_BASE_ADAPTER domain.RegisterCrossBindingAdaptor(new ApplicationSettingsBaseAdapter()); #endif app.ILRuntimeHotFix.Start(); ILRuntime.Runtime.CLRBinding.BindingCodeGenerator.GenerateBindingCode(domain, generatedRoot); } } }
private static void OnGenerateAdapter(AppDomain domain, string path) { ILRuntimeAppEditor app = ILRuntimeAppEditor.GetInstance(); IHotFixConfig config = app.GetHotFixConfig(); string[] splits = path.Split('.'); splits = splits[0].Split('/'); string name = splits[splits.Length - 1]; string code = string.Empty; var className = config.AutoAdapterGenerates; bool hasAdapterConfig = false; foreach (var item in className) { if (item.Key == name) { hasAdapterConfig = true; if (path.Contains(".cs")) { using (StreamWriter sw = new StreamWriter(path)) { sw.WriteLine(CrossBindingCodeGenerator.GenerateCrossBindingAdapterCode(item.Value, config.SpaceName)); } } else { string info = string.Format("选定的文件 {0} 不是cs代码文件", path); EditorUtility.DisplayDialog("生成错误", info, "朕知道了"); throw new Exception(info); } } } if (!hasAdapterConfig) { string info = "选定的文件可能未包含在适配器的配置中,请通过修改 AppHotFixConfigBase 或其子类中的 GetAutoAdapterGenerates() 方法增加定义之后重试"; EditorUtility.DisplayDialog("生成错误", info, "朕知道了"); throw new Exception(info); } }
private static AppDomain AppDomain() { return(ILRuntimeAppEditor.GetInstance().ILRuntimeHotFix.ILAppDomain); }