LinkXMLGenerator.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Xml;
  4. using UnityEngine;
  5. using UnityEditor;
  6. namespace TapSDK.Core.Editor {
  7. public class LinkedAssembly {
  8. public string Fullname { get; set; }
  9. public string[] Types { get; set; }
  10. }
  11. public class LinkXMLGenerator {
  12. public static void Generate(string path, IEnumerable<LinkedAssembly> assemblies) {
  13. DirectoryInfo parent = Directory.GetParent(path);
  14. if (!parent.Exists) {
  15. Directory.CreateDirectory(parent.FullName);
  16. }
  17. XmlDocument doc = new XmlDocument();
  18. XmlNode rootNode = doc.CreateElement("linker");
  19. doc.AppendChild(rootNode);
  20. foreach (LinkedAssembly assembly in assemblies) {
  21. XmlNode assemblyNode = doc.CreateElement("assembly");
  22. XmlAttribute fullnameAttr = doc.CreateAttribute("fullname");
  23. fullnameAttr.Value = assembly.Fullname;
  24. assemblyNode.Attributes.Append(fullnameAttr);
  25. if (assembly.Types?.Length > 0) {
  26. foreach (string type in assembly.Types) {
  27. XmlNode typeNode = doc.CreateElement("type");
  28. XmlAttribute typeFullnameAttr = doc.CreateAttribute("fullname");
  29. typeFullnameAttr.Value = type;
  30. typeNode.Attributes.Append(typeFullnameAttr);
  31. XmlAttribute typePreserveAttr = doc.CreateAttribute("preserve");
  32. typePreserveAttr.Value = "all";
  33. typeNode.Attributes.Append(typePreserveAttr);
  34. assemblyNode.AppendChild(typeNode);
  35. }
  36. } else {
  37. XmlAttribute preserveAttr = doc.CreateAttribute("preserve");
  38. preserveAttr.Value = "all";
  39. assemblyNode.Attributes.Append(preserveAttr);
  40. }
  41. rootNode.AppendChild(assemblyNode);
  42. }
  43. doc.Save(path);
  44. AssetDatabase.Refresh();
  45. Debug.Log($"Generate {path} done.");
  46. Debug.Log(doc.OuterXml);
  47. }
  48. public static void Delete(string path) {
  49. if (File.Exists(path)) {
  50. File.Delete(path);
  51. AssetDatabase.Refresh();
  52. }
  53. Debug.Log($"Delete {path} done.");
  54. }
  55. }
  56. }