mirror of https://github.com/tuyoogame/YooAsset
commit
c7d678282b
|
@ -72,4 +72,6 @@ sysinfo.txt
|
|||
# Crashlytics generated file
|
||||
crashlytics-build.properties
|
||||
|
||||
*.vsconfig
|
||||
*.vsconfig
|
||||
Assets/csc.rsp
|
||||
Assets/csc.rsp.meta
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue