Example #1
0
        public static void BuildHotfix()
        {
            if (File.Exists("Assets/Hotfix/Unity.Hotfix.asmdef~"))
            {
                File.Move("Assets/Hotfix/Unity.Hotfix.asmdef~", "Assets/Hotfix/Unity.Hotfix.asmdef");
                LogUtil.Log("安装Hotfix");
                AssetDatabase.Refresh();
            }
            else
            {
                if (File.Exists("Assets/Hotfix/Unity.Hotfix.asmdef"))
                {
                    LogUtil.Log("安装Hotfix");
                }
                else
                {
                    LogUtil.Log("Hotfix丢失");
                }
            }
            if (File.Exists("Assets/Resources/DLL/Unity.Hotfix.dll.bytes"))
            {
                File.Delete("Assets/Resources/DLL/Unity.Hotfix.dll.bytes");
            }
            if (File.Exists("Assets/Resources/DLL/Unity.Hotfix.pdb.bytes"))
            {
                File.Delete("Assets/Resources/DLL/Unity.Hotfix.pdb.bytes");
            }
            if (File.Exists("Assets/Bundles/DLL/Unity.Hotfix.dll.bytes"))
            {
                File.Delete("Assets/Bundles/DLL/Unity.Hotfix.dll.bytes");
            }
            if (File.Exists("Assets/Bundles/DLL/Unity.Hotfix.pdb.bytes"))
            {
                File.Delete("Assets/Bundles/DLL/Unity.Hotfix.pdb.bytes");
            }
#if Release
            if (File.Exists("Unity.Hotfix.csproj"))
            {
                RoslynUtil.BuildDll("Unity.Hotfix.csproj", "Assets/Resources/DLL/Unity.Hotfix.dll.bytes", BuildType.Release, false);
                FileUtil.SaveAsset("Assets/Resources/DLL/Unity.Hotfix.dll.bytes", RijndaelUtil.RijndaelEncrypt("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", FileUtil.GetAsset("Assets/Resources/DLL/Unity.Hotfix.dll.bytes")));
                File.Copy("Assets/Resources/DLL/Unity.Hotfix.dll.bytes", "Assets/Bundles/DLL/Unity.Hotfix.dll.bytes", true);
            }
#else
            if (File.Exists("Library/ScriptAssemblies/Unity.Hotfix.dll") && File.Exists("Library/ScriptAssemblies/Unity.Hotfix.pdb"))
            {
                File.Copy("Library/ScriptAssemblies/Unity.Hotfix.dll", "Assets/Resources/DLL/Unity.Hotfix.dll.bytes", true);
                File.Copy("Library/ScriptAssemblies/Unity.Hotfix.pdb", "Assets/Resources/DLL/Unity.Hotfix.pdb.bytes", true);
                FileUtil.SaveAsset("Assets/Resources/DLL/Unity.Hotfix.dll.bytes", RijndaelUtil.RijndaelEncrypt("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", FileUtil.GetAsset("Assets/Resources/DLL/Unity.Hotfix.dll.bytes")));
                File.Copy("Assets/Resources/DLL/Unity.Hotfix.dll.bytes", "Assets/Bundles/DLL/Unity.Hotfix.dll.bytes", true);
                File.Copy("Assets/Resources/DLL/Unity.Hotfix.pdb.bytes", "Assets/Bundles/DLL/Unity.Hotfix.pdb.bytes", true);
            }
#endif
            LinkUtil.BuildLink();
            AssetDatabase.Refresh();
        }
Example #2
0
        public void BuildCLRBinding()
        {
            AppDomain appDomain = new AppDomain();

            using (MemoryStream dll = new MemoryStream(RijndaelUtil.RijndaelDecrypt("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", FileUtil.GetAsset("Assets/Resources/DLL/Unity.Hotfix.dll.bytes"))))
            {
                appDomain.LoadAssembly(dll);
                ILRuntimeUtil.LccFrameworkRegisterCrossBindingAdaptor(appDomain);
                BindingCodeGenerator.GenerateBindingCode(appDomain, "Assets/Scripts/Runtime/Core/Manager/ILRuntime/Generated");
            }
            AssetDatabase.Refresh();
        }
Example #3
0
        public static void GenerateCLRBindingByAnalysis()
        {
            //用新的分析热更dll调用引用来生成绑定代码
            AppDomain domain = new AppDomain();

            using (FileStream fs = new FileStream("Assets/Resources/DLL/Unity.Hotfix.dll.bytes", FileMode.Open, FileAccess.Read))
            {
                byte[] bytes = new byte[fs.ReadByte()];
                fs.Read(bytes, 0, bytes.Length);
                MemoryStream dll = new MemoryStream(RijndaelUtil.RijndaelDecrypt("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", bytes));
                domain.LoadAssembly(dll);
                //Crossbind Adapter is needed to generate the correct binding code
                InitILRuntime(domain);
                BindingCodeGenerator.GenerateBindingCode(domain, "Assets/Scripts/Runtime/Core/Manager/ILRuntime/Generated");
            }
            AssetDatabase.Refresh();
        }