diff --git a/Editor/BuildProcessors/FilterHotFixAssemblies.cs b/Editor/BuildProcessors/FilterHotFixAssemblies.cs index bd6cdc5..2488179 100644 --- a/Editor/BuildProcessors/FilterHotFixAssemblies.cs +++ b/Editor/BuildProcessors/FilterHotFixAssemblies.cs @@ -1,4 +1,5 @@ -using System; +using HybridCLR.Editor.Meta; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -35,10 +36,12 @@ namespace HybridCLR.Editor.BuildProcessors } } + var assResolver = MetaUtil.CreateHotUpdateAssemblyResolver(EditorUserBuildSettings.activeBuildTarget); // 检查是否填写了正确的dll名称 foreach (var hotUpdateDll in allHotUpdateDllFiles) { - if (assemblies.All(ass => !ass.EndsWith(hotUpdateDll))) + string hotUpdateAssName = hotUpdateDll.Substring(0, hotUpdateDll.Length - 4); + if (assemblies.All(ass => !ass.EndsWith(hotUpdateDll)) && string.IsNullOrEmpty(assResolver.ResolveAssembly(hotUpdateAssName, false))) { throw new Exception($"热更新 assembly:{hotUpdateDll} 不存在,请检查拼写错误"); } diff --git a/Editor/Commands/LinkGeneratorCommand.cs b/Editor/Commands/LinkGeneratorCommand.cs index 81acaa7..4d6a16f 100644 --- a/Editor/Commands/LinkGeneratorCommand.cs +++ b/Editor/Commands/LinkGeneratorCommand.cs @@ -26,29 +26,12 @@ namespace HybridCLR.Editor.Commands var ls = SettingsUtil.HybridCLRSettings; - var allAssByNames = new Dictionary(); - foreach (var ass in AppDomain.CurrentDomain.GetAssemblies()) - { - allAssByNames[ass.GetName().Name] = ass; - } - - var hotfixAssembles = new List(); - foreach(var assName in SettingsUtil.HotUpdateAssemblyNames) - { - if (allAssByNames.TryGetValue(assName, out var ass)) - { - hotfixAssembles.Add(ass); - } - else - { - throw new Exception($"assembly:{assName} 不存在"); - } - } + List hotfixAssemblies = SettingsUtil.HotUpdateAssemblyNames; var analyzer = new Analyzer(Meta.MetaUtil.CreateBuildTargetAssemblyResolver(EditorUserBuildSettings.activeBuildTarget), HybridCLRSettings.Instance.collectAssetReferenceTypes); - var refTypes = analyzer.CollectRefs(hotfixAssembles); + var refTypes = analyzer.CollectRefs(hotfixAssemblies); - Debug.Log($"[LinkGeneratorCommand] hotfix assembly count:{hotfixAssembles.Count}, ref type count:{refTypes.Count} output:{Application.dataPath}/{ls.outputLinkFile}"); + Debug.Log($"[LinkGeneratorCommand] hotfix assembly count:{hotfixAssemblies.Count}, ref type count:{refTypes.Count} output:{Application.dataPath}/{ls.outputLinkFile}"); var linkXmlWriter = new LinkXmlWriter(); linkXmlWriter.Write($"{Application.dataPath}/{ls.outputLinkFile}", refTypes); AssetDatabase.Refresh(); diff --git a/Editor/Commands/MethodBridgeGeneratorCommand.cs b/Editor/Commands/MethodBridgeGeneratorCommand.cs index 27fa016..6fb3270 100644 --- a/Editor/Commands/MethodBridgeGeneratorCommand.cs +++ b/Editor/Commands/MethodBridgeGeneratorCommand.cs @@ -52,12 +52,9 @@ namespace HybridCLR.Editor.Commands static IAssemblyResolver CreateBuildTargetAssemblyResolver(BuildTarget target) { - return new CombinedAssemblyResolver(new PathAssemblyResolver( - SettingsUtil.GetAssembliesPostIl2CppStripDir(target), - SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target)), - new UnityPluginAssemblyResolver(), - new UnityDotNetAOTAssemblyResolver(), - new UnityEditorAssemblyResolver() + return new CombinedAssemblyResolver( + new PathAssemblyResolver(SettingsUtil.GetAssembliesPostIl2CppStripDir(target)), + MetaUtil.CreateHotUpdateAssemblyResolver(target) ); } diff --git a/Editor/Link/Analyzer.cs b/Editor/Link/Analyzer.cs index 9b6d417..4472c2a 100644 --- a/Editor/Link/Analyzer.cs +++ b/Editor/Link/Analyzer.cs @@ -22,23 +22,23 @@ namespace HybridCLR.Editor.Link _analyzeAssetType = analyzeAssetType; } - public HashSet CollectRefs(List rootAssemblies) + public HashSet CollectRefs(List rootAssemblies) { using (var assCollector = new AssemblyCache(_resolver)) { var rootAssemblyName = new HashSet(); foreach (var ass in rootAssemblies) { - if (!rootAssemblyName.Add(ass.GetName().Name)) + if (!rootAssemblyName.Add(ass)) { - throw new Exception($"assembly:{ass.GetName().Name} 重复"); + throw new Exception($"assembly:{ass} 重复"); } } var typeRefs = new HashSet(TypeEqualityComparer.Instance); foreach (var rootAss in rootAssemblies) { - var dnAss = assCollector.LoadModule(rootAss.GetName().Name); + var dnAss = assCollector.LoadModule(rootAss); foreach (var type in dnAss.GetTypeRefs()) { if (!rootAssemblyName.Contains(type.DefinitionAssembly.Name)) diff --git a/Editor/Meta/MetaUtil.cs b/Editor/Meta/MetaUtil.cs index 233ff88..b325563 100644 --- a/Editor/Meta/MetaUtil.cs +++ b/Editor/Meta/MetaUtil.cs @@ -141,6 +141,25 @@ namespace HybridCLR.Editor.Meta } } + public static IAssemblyResolver CreateExternalAssemblyResolver(BuildTarget target) + { + var externalDirs = HybridCLRSettings.Instance.externalHotUpdateAssembliyDirs; + if (externalDirs == null || externalDirs.Length == 0) + { + return new PathAssemblyResolver(); + } + else + { + var externalDirList = new List(); + foreach (var dir in externalDirs) + { + externalDirList.Add($"{dir}/{target}"); + externalDirList.Add(dir); + } + return new PathAssemblyResolver(externalDirList.ToArray()); + } + } + public static IAssemblyResolver CreateBuildTargetAssemblyResolver(BuildTarget target) { return new CombinedAssemblyResolver(CreateHotUpdateAssemblyResolver(target), diff --git a/Editor/Meta/UnityEditorAssemblyResolver.cs b/Editor/Meta/UnityEditorAssemblyResolver.cs index 092d925..7057249 100644 --- a/Editor/Meta/UnityEditorAssemblyResolver.cs +++ b/Editor/Meta/UnityEditorAssemblyResolver.cs @@ -16,7 +16,11 @@ namespace HybridCLR.Editor.Meta { return refAss.Location; } - return Assembly.Load(assemblyName).Location; + if (throwExIfNotFind) + { + throw new Exception($"resolve assembly:{assemblyName} fail"); + } + return null; } } } diff --git a/package.json b/package.json index 1f8b76e..127f53c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.focus-creative-games.hybridclr_unity", - "version": "1.1.10", + "version": "1.1.11", "displayName": "HybridCLR", "description": "Unity package for HybridCLR. It includes editor and runtime scripts and assets for HybridCLR", "category": "Runtime",