71 lines
2.4 KiB
C#
71 lines
2.4 KiB
C#
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Xml;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
namespace TapTap.Common.Editor {
|
|
public class LinkedAssembly {
|
|
public string Fullname { get; set; }
|
|
public string[] Types { get; set; }
|
|
}
|
|
|
|
public class LinkXMLGenerator {
|
|
public static void Generate(string path, IEnumerable<LinkedAssembly> assemblies) {
|
|
DirectoryInfo parent = Directory.GetParent(path);
|
|
if (!parent.Exists) {
|
|
Directory.CreateDirectory(parent.FullName);
|
|
}
|
|
|
|
XmlDocument doc = new XmlDocument();
|
|
|
|
XmlNode rootNode = doc.CreateElement("linker");
|
|
doc.AppendChild(rootNode);
|
|
|
|
foreach (LinkedAssembly assembly in assemblies) {
|
|
XmlNode assemblyNode = doc.CreateElement("assembly");
|
|
|
|
XmlAttribute fullnameAttr = doc.CreateAttribute("fullname");
|
|
fullnameAttr.Value = assembly.Fullname;
|
|
assemblyNode.Attributes.Append(fullnameAttr);
|
|
|
|
if (assembly.Types?.Length > 0) {
|
|
foreach (string type in assembly.Types) {
|
|
XmlNode typeNode = doc.CreateElement("type");
|
|
XmlAttribute typeFullnameAttr = doc.CreateAttribute("fullname");
|
|
typeFullnameAttr.Value = type;
|
|
typeNode.Attributes.Append(typeFullnameAttr);
|
|
|
|
XmlAttribute typePreserveAttr = doc.CreateAttribute("preserve");
|
|
typePreserveAttr.Value = "all";
|
|
typeNode.Attributes.Append(typePreserveAttr);
|
|
|
|
assemblyNode.AppendChild(typeNode);
|
|
}
|
|
} else {
|
|
XmlAttribute preserveAttr = doc.CreateAttribute("preserve");
|
|
preserveAttr.Value = "all";
|
|
assemblyNode.Attributes.Append(preserveAttr);
|
|
}
|
|
|
|
rootNode.AppendChild(assemblyNode);
|
|
}
|
|
|
|
doc.Save(path);
|
|
AssetDatabase.Refresh();
|
|
|
|
Debug.Log($"Generate {path} done.");
|
|
Debug.Log(doc.OuterXml);
|
|
}
|
|
|
|
public static void Delete(string path) {
|
|
if (File.Exists(path)) {
|
|
File.Delete(path);
|
|
AssetDatabase.Refresh();
|
|
}
|
|
|
|
Debug.Log($"Delete {path} done.");
|
|
}
|
|
}
|
|
}
|