2022-09-23 09:40:06 +08:00
|
|
|
|
using HybridCLR.Editor.Link;
|
2022-09-22 08:56:07 +08:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace HybridCLR.Editor.Commands
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
public static class LinkGeneratorCommand
|
|
|
|
|
{
|
|
|
|
|
|
2022-09-23 14:26:28 +08:00
|
|
|
|
[MenuItem("HybridCLR/Generate/LinkXml", priority = 100)]
|
2022-09-22 08:56:07 +08:00
|
|
|
|
public static void GenerateLinkXml()
|
|
|
|
|
{
|
|
|
|
|
GenerateLinkXml(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void GenerateLinkXml(bool compileDll)
|
|
|
|
|
{
|
|
|
|
|
if (compileDll)
|
|
|
|
|
{
|
|
|
|
|
CompileDllCommand.CompileDllActiveBuildTarget();
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-09 20:53:13 +08:00
|
|
|
|
var ls = SettingsUtil.HybridCLRSettings;
|
2022-09-22 08:56:07 +08:00
|
|
|
|
|
|
|
|
|
var allAssByNames = new Dictionary<string, Assembly>();
|
|
|
|
|
foreach (var ass in AppDomain.CurrentDomain.GetAssemblies())
|
|
|
|
|
{
|
|
|
|
|
allAssByNames[ass.GetName().Name] = ass;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var hotfixAssembles = new List<Assembly>();
|
|
|
|
|
foreach(var assName in SettingsUtil.HotUpdateAssemblyNames)
|
|
|
|
|
{
|
|
|
|
|
if (allAssByNames.TryGetValue(assName, out var ass))
|
|
|
|
|
{
|
|
|
|
|
hotfixAssembles.Add(ass);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw new Exception($"assembly:{assName} 不存在");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-17 12:16:18 +08:00
|
|
|
|
var analyzer = new Analyzer(Meta.MetaUtil.CreateBuildTargetAssemblyResolver(EditorUserBuildSettings.activeBuildTarget), HybridCLRSettings.Instance.collectAssetReferenceTypes);
|
2022-09-22 08:56:07 +08:00
|
|
|
|
var refTypes = analyzer.CollectRefs(hotfixAssembles);
|
|
|
|
|
|
|
|
|
|
Debug.Log($"[LinkGeneratorCommand] hotfix assembly count:{hotfixAssembles.Count}, ref type count:{refTypes.Count} output:{Application.dataPath}/{ls.outputLinkFile}");
|
|
|
|
|
var linkXmlWriter = new LinkXmlWriter();
|
|
|
|
|
linkXmlWriter.Write($"{Application.dataPath}/{ls.outputLinkFile}", refTypes);
|
2022-10-09 03:25:56 +08:00
|
|
|
|
AssetDatabase.Refresh();
|
2022-09-22 08:56:07 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|