Update MacrosProcessor.cs

修正YooAsset相关宏在引用库不能生效的问题.
pull/500/head
Y-way 2025-03-10 15:07:04 +08:00
parent 72b1278f5c
commit 9a6f6a56bd
1 changed files with 109 additions and 4 deletions

View File

@ -1,18 +1,20 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using UnityEditor;
using UnityEditor.PackageManager;
using UnityEngine;
using static UnityEditor.PlayerSettings;
namespace YooAsset.Editor
{
[InitializeOnLoad]
public class MacrosProcessor : AssetPostprocessor
{
static MacrosProcessor()
{
}
// csc.rsp 文件路径
private static string RspFilePath => Path.Combine(Application.dataPath, "csc.rsp");
/// <summary>
/// YooAsset版本宏定义
/// </summary>
@ -23,6 +25,12 @@ namespace YooAsset.Editor
"YOO_ASSET_2_3_OR_NEWER",
};
static MacrosProcessor()
{
//添加到全局宏定义
UpdateRspFile(YooAssetMacros);
}
static string OnGeneratedCSProject(string path, string content)
{
XmlDocument xmlDoc = new XmlDocument();
@ -105,5 +113,102 @@ namespace YooAsset.Editor
return false;
}
/// <summary>
/// 更新csc.rsp文件
/// </summary>
/// <param name="macrosToAdd"></param>
/// <param name="macrosToRemove"></param>
private static void UpdateRspFile(List<string> macrosToAdd = null, List<string> macrosToRemove = null)
{
HashSet<string> existingDefines = new HashSet<string>();
List<string> otherLines = new List<string>();
// 1. 读取现有内容
ReadRspFile(ref existingDefines, ref otherLines);
// 2. 添加新宏
if (macrosToAdd != null && macrosToAdd.Count > 0))
{
macrosToAdd.ForEach(x =>
{
if (existingDefines.Contains(x) == false)
existingDefines.Add(x);
});
}
// 3. 移除指定宏
if (macrosToRemove != null && macrosToRemove.Count > 0))
{
macrosToRemove.ForEach(x =>
{
existingDefines.Remove(x);
});
}
// 4. 重新生成内容
WriteRspFile(existingDefines, otherLines);
// 5. 刷新AssetDatabase
AssetDatabase.Refresh();
EditorUtility.RequestScriptReload();
}
/// <summary>
/// 读取csc.rsp文件,返回宏定义和其他行
/// </summary>
/// <param name="defines"></param>
/// <param name="others"></param>
private static void ReadRspFile(ref HashSet<string> defines, ref List<string> others)
{
if (defines == null)
{
defines = new HashSet<string>();
}
if (others == null)
{
others = new List<string>();
}
if (File.Exists(RspFilePath) == false)
{
return;
}
foreach (string line in File.ReadAllLines(RspFilePath))
{
if (line.StartsWith("-define:"))
{
string[] parts = line.Split(new[] { ':' }, 2);
if (parts.Length == 2)
{
defines.Add(parts[1].Trim());
}
}
else
{
others.Add(line);
}
}
}
/// <summary>
/// 重写入出csc.rsp文件
/// </summary>
/// <param name="defines"></param>
/// <param name="others"></param>
private static void WriteRspFile(HashSet<string> defines, List<string> others)
{
StringBuilder sb = new StringBuilder();
if (others != null && others.Count > 0)
{
others.ForEach(o => sb.AppendLine(o));
}
if (defines != null && defines.Count > 0)
{
foreach (string define in defines)
{
sb.AppendLine($"-define:{define}");
}
}
File.WriteAllText(RspFilePath, sb.ToString());
}
}
}