diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea318b6..a87da1c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,123 @@
All notable changes to this package will be documented in this file.
+## [2.3.7] - 2025-04-01
+
+### Improvements
+
+- (#526) 运行时资源清单的哈希值验证兼容了MD5和CRC32两种方式。
+- (#515) 优化了资源路径大小写不敏感的逻辑代码,减少字符串操作产生的GC。
+- (#523) UnloadUnusedAssetsOperation方法支持了分帧处理。
+
+### Fixed
+
+- (#520) 修复了UWP平台获取WWW加载路径未适配的问题。
+
+### Added
+
+- 新增了文件系统初始化参数:INSTALL_CLEAR_MODE
+
+ ```csharp
+ ///
+ /// 覆盖安装清理模式
+ ///
+ public enum EOverwriteInstallClearMode
+ {
+ ///
+ /// 不做任何处理
+ ///
+ None = 0,
+
+ ///
+ /// 清理所有缓存文件(包含资源文件和清单文件)
+ ///
+ ClearAllCacheFiles = 1,
+
+ ///
+ /// 清理所有缓存的资源文件
+ ///
+ ClearAllBundleFiles = 2,
+
+ ///
+ /// 清理所有缓存的清单文件
+ ///
+ ClearAllManifestFiles = 3,
+ }
+ ```
+
+- 新增了初始化参数:BundleLoadingMaxConcurrency
+
+ ```csharp
+ public abstract class InitializeParameters
+ {
+ ///
+ /// 同时加载Bundle文件的最大并发数
+ ///
+ public int BundleLoadingMaxConcurrency = int.MaxValue;
+ }
+ ```
+
+## [2.3.6] - 2025-03-25
+
+### Improvements
+
+- 构建管线新增了TaskCreateCatalog任务节点。
+- 内置文件系统的catalog文件现在存储在streammingAssets目录下。
+
+### Fixed
+
+- (#486) 修复了微信小游戏文件系统调用ClearUnusedBundleFiles时候的异常。
+
+## [2.3.5-preview] - 2025-03-14
+
+### Fixed
+
+- (#502) 修复了原生缓存文件由于文件格式变动导致的加载本地缓存文件失败的问题。
+- (#504) 修复了MacOS平台Offline Play Mode模式请求本地资源清单失败的问题。
+- (#506) 修复了v2.3x版本LoadAllAssets方法计算依赖Bundle不完整的问题。
+- (#506) 修复了微信小游戏文件系统,在启用加密算法后卸载bundle报错的问题。
+
+## [2.3.4-preview] - 2025-03-08
+
+### Improvements
+
+- YooAsset支持了版本宏定义。
+
+ ```csharp
+ YOO_ASSET_2
+ YOO_ASSET_2_3
+ YOO_ASSET_2_3_OR_NEWER
+ ```
+
+### Fixed
+
+- (#389) 修复了禁用域重载(Reload Domain)的情况下,再次启动游戏报错的问题。
+- (#496) 修复了文件系统参数RESUME_DOWNLOAD_MINMUM_SIZE传入int值会导致异常的错误。
+- (#498) 修复了v2.3版本尝试加载安卓包内的原生资源包失败的问题。
+
+### Added
+
+- 新增了YooAssets.GetAllPackages()方法
+
+ ```csharp
+ ///
+ /// 获取所有资源包裹
+ ///
+ public static List GetAllPackages()
+ ```
+
+## [2.3.3-preview] - 2025-03-06
+
+### Improvements
+
+- 新增了异步操作任务调试器,AssetBundleDebugger窗口-->OperationView视图模式
+- 编辑器下模拟构建默认启用依赖关系数据库,可以大幅降低编辑器下启动游戏的时间。
+- 单元测试用例增加加密解密测试用例。
+
+### Fixed
+
+- (#492) 修复了发布的MAC平台应用,在启动的时候提示权限无法获取的问题。
+
## [2.3.2-preview] - 2025-02-27
### Fixed
diff --git a/Editor/Exntesion.meta b/Editor/Assembly.meta
similarity index 77%
rename from Editor/Exntesion.meta
rename to Editor/Assembly.meta
index 349ebca..f146dd2 100644
--- a/Editor/Exntesion.meta
+++ b/Editor/Assembly.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 57108573b0656af4fb20588dbfea7484
+guid: fab3cd742c11be2479b07f5d447a78c9
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Editor/Assembly/MacroDefine.cs b/Editor/Assembly/MacroDefine.cs
new file mode 100644
index 0000000..a647b43
--- /dev/null
+++ b/Editor/Assembly/MacroDefine.cs
@@ -0,0 +1,17 @@
+using System.Collections.Generic;
+
+namespace YooAsset.Editor
+{
+ public class MacroDefine
+ {
+ ///
+ /// YooAsset版本宏定义
+ ///
+ public static readonly List Macros = new List()
+ {
+ "YOO_ASSET_2",
+ "YOO_ASSET_2_3",
+ "YOO_ASSET_2_3_OR_NEWER",
+ };
+ }
+}
diff --git a/Samples~/Test Sample/Runtime/AssetBundleCollectorPreapre.cs.meta b/Editor/Assembly/MacroDefine.cs.meta
similarity index 83%
rename from Samples~/Test Sample/Runtime/AssetBundleCollectorPreapre.cs.meta
rename to Editor/Assembly/MacroDefine.cs.meta
index fdb3e83..4224cd3 100644
--- a/Samples~/Test Sample/Runtime/AssetBundleCollectorPreapre.cs.meta
+++ b/Editor/Assembly/MacroDefine.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 07f7c95e8e42fd04f81b9925b2dcf0d0
+guid: a61e5c2ca04aab647b1ed0492086aa8f
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Editor/Assembly/MacroProcessor.cs b/Editor/Assembly/MacroProcessor.cs
new file mode 100644
index 0000000..265fc1e
--- /dev/null
+++ b/Editor/Assembly/MacroProcessor.cs
@@ -0,0 +1,96 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using UnityEditor;
+
+namespace YooAsset.Editor
+{
+ [InitializeOnLoad]
+ public class MacroProcessor : AssetPostprocessor
+ {
+ static string OnGeneratedCSProject(string path, string content)
+ {
+ XmlDocument xmlDoc = new XmlDocument();
+ xmlDoc.LoadXml(content);
+
+ if (IsCSProjectReferenced(xmlDoc.DocumentElement) == false)
+ return content;
+
+ if (ProcessDefineConstants(xmlDoc.DocumentElement) == false)
+ return content;
+
+ // 将修改后的XML结构重新输出为文本
+ var stringWriter = new StringWriter();
+ var writerSettings = new XmlWriterSettings();
+ writerSettings.Indent = true;
+ var xmlWriter = XmlWriter.Create(stringWriter, writerSettings);
+ xmlDoc.WriteTo(xmlWriter);
+ xmlWriter.Flush();
+ return stringWriter.ToString();
+ }
+
+ ///
+ /// 处理宏定义
+ ///
+ private static bool ProcessDefineConstants(XmlElement element)
+ {
+ if (element == null)
+ return false;
+
+ bool processed = false;
+ foreach (XmlNode node in element.ChildNodes)
+ {
+ if (node.Name != "PropertyGroup")
+ continue;
+
+ foreach (XmlNode childNode in node.ChildNodes)
+ {
+ if (childNode.Name != "DefineConstants")
+ continue;
+
+ string[] defines = childNode.InnerText.Split(';');
+ HashSet hashSets = new HashSet(defines);
+ foreach (string yooMacro in MacroDefine.Macros)
+ {
+ string tmpMacro = yooMacro.Trim();
+ if (hashSets.Contains(tmpMacro) == false)
+ hashSets.Add(tmpMacro);
+ }
+ childNode.InnerText = string.Join(";", hashSets.ToArray());
+ processed = true;
+ }
+ }
+
+ return processed;
+ }
+
+ ///
+ /// 检测工程是否引用了YooAsset
+ ///
+ private static bool IsCSProjectReferenced(XmlElement element)
+ {
+ if (element == null)
+ return false;
+
+ foreach (XmlNode node in element.ChildNodes)
+ {
+ if (node.Name != "ItemGroup")
+ continue;
+
+ foreach (XmlNode childNode in node.ChildNodes)
+ {
+ if (childNode.Name != "Reference" && childNode.Name != "ProjectReference")
+ continue;
+
+ string include = childNode.Attributes["Include"].Value;
+ if (include.Contains("YooAsset"))
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/Samples~/Test Sample/Runtime/AssetBundleCollectorMaker.cs.meta b/Editor/Assembly/MacroProcessor.cs.meta
similarity index 83%
rename from Samples~/Test Sample/Runtime/AssetBundleCollectorMaker.cs.meta
rename to Editor/Assembly/MacroProcessor.cs.meta
index 59ffd09..89d654c 100644
--- a/Samples~/Test Sample/Runtime/AssetBundleCollectorMaker.cs.meta
+++ b/Editor/Assembly/MacroProcessor.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 88e4ec854876f3f40bce38bc880c0f6a
+guid: 88d5a41d078a82e40b82265ed4c3631a
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Editor/Assembly/RspGenerator.cs b/Editor/Assembly/RspGenerator.cs
new file mode 100644
index 0000000..7b199f0
--- /dev/null
+++ b/Editor/Assembly/RspGenerator.cs
@@ -0,0 +1,115 @@
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Xml;
+using UnityEditor;
+using UnityEngine;
+
+#if YOO_ASSET_EXPERIMENT
+namespace YooAsset.Editor.Experiment
+{
+ [InitializeOnLoad]
+ public class RspGenerator
+ {
+ // csc.rsp文件路径
+ private static string RspFilePath => Path.Combine(Application.dataPath, "csc.rsp");
+
+ static RspGenerator()
+ {
+ UpdateRspFile(MacroDefine.Macros, null);
+ }
+
+ ///
+ /// 更新csc.rsp文件
+ ///
+ private static void UpdateRspFile(List addMacros, List removeMacros)
+ {
+ var existingDefines = new HashSet();
+ var otherLines = new List();
+
+ // 1. 读取现有内容
+ ReadRspFile(existingDefines, otherLines);
+
+ // 2. 添加新宏
+ if (addMacros != null && addMacros.Count > 0)
+ {
+ addMacros.ForEach(x =>
+ {
+ if (existingDefines.Contains(x) == false)
+ existingDefines.Add(x);
+ });
+ }
+
+ // 3. 移除指定宏
+ if (removeMacros != null && removeMacros.Count > 0)
+ {
+ removeMacros.ForEach(x =>
+ {
+ existingDefines.Remove(x);
+ });
+ }
+
+ // 4. 重新生成内容
+ WriteRspFile(existingDefines, otherLines);
+
+ // 5. 刷新AssetDatabase
+ AssetDatabase.Refresh();
+ EditorUtility.RequestScriptReload();
+ }
+
+ ///
+ /// 读取csc.rsp文件,返回宏定义和其他行
+ ///
+ private static void ReadRspFile(HashSet defines, 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());
+ }
+ }
+}
+#endif
\ No newline at end of file
diff --git a/Editor/UIElements/ElementsDefine/PanelSplitView.cs.meta b/Editor/Assembly/RspGenerator.cs.meta
similarity index 83%
rename from Editor/UIElements/ElementsDefine/PanelSplitView.cs.meta
rename to Editor/Assembly/RspGenerator.cs.meta
index abfbfc1..dc436a4 100644
--- a/Editor/UIElements/ElementsDefine/PanelSplitView.cs.meta
+++ b/Editor/Assembly/RspGenerator.cs.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 0c3f4136cf7142346ae33e8a82cbdb27
+guid: c2662e1d33b1eea469695b68d18b1739
MonoImporter:
externalObjects: {}
serializedVersion: 2
diff --git a/Editor/AssetArtReporter/AssetArtReporterWindow.cs b/Editor/AssetArtReporter/AssetArtReporterWindow.cs
index 728fb2e..e246c7c 100644
--- a/Editor/AssetArtReporter/AssetArtReporterWindow.cs
+++ b/Editor/AssetArtReporter/AssetArtReporterWindow.cs
@@ -97,7 +97,7 @@ namespace YooAsset.Editor
private Button _passesVisibleBtn;
private Label _titleLabel;
private Label _descLabel;
- private TableView _elementTableView;
+ private TableViewer _elementTableView;
private ScanReportCombiner _reportCombiner;
private string _lastestOpenFolder;
@@ -152,7 +152,7 @@ namespace YooAsset.Editor
_descLabel = root.Q