diff --git a/.gitignore b/.gitignore
index b38cfe63..9764a0ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -72,4 +72,6 @@ sysinfo.txt
# Crashlytics generated file
crashlytics-build.properties
-*.vsconfig
\ No newline at end of file
+*.vsconfig
+Assets/csc.rsp
+Assets/csc.rsp.meta
diff --git a/Assets/YooAsset/Editor/Assembly/MacrosProcessor.cs b/Assets/YooAsset/Editor/Assembly/MacrosProcessor.cs
index 3ad49de6..17e24a28 100644
--- a/Assets/YooAsset/Editor/Assembly/MacrosProcessor.cs
+++ b/Assets/YooAsset/Editor/Assembly/MacrosProcessor.cs
@@ -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");
///
/// YooAsset版本宏定义
///
@@ -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;
}
+ ///
+ /// 更新csc.rsp文件
+ ///
+ ///
+ ///
+ private static void UpdateRspFile(List macrosToAdd = null, List macrosToRemove = null)
+ {
+ HashSet existingDefines = new HashSet();
+ List otherLines = new List();
+ // 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();
+ }
+ ///
+ /// 读取csc.rsp文件,返回宏定义和其他行
+ ///
+ ///
+ ///
+ private static void ReadRspFile(ref HashSet defines, ref List others)
+ {
+ if (defines == null)
+ {
+ defines = new HashSet();
+ }
+
+ if (others == null)
+ {
+ others = new List();
+ }
+
+ 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);
+ }
+ }
+ }
+ ///
+ /// 重写入出csc.rsp文件
+ ///
+ ///
+ ///
+ private static void WriteRspFile(HashSet defines, List 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());
+ }
+
}
}