diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilder.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilder.cs index 9cd61d2..28845ee 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilder.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/AssetBundleBuilder.cs @@ -48,6 +48,12 @@ namespace YooAsset.Editor BuildAssetBundleOptions opt = BuildAssetBundleOptions.None; opt |= BuildAssetBundleOptions.StrictMode; //Do not allow the build to succeed if any errors are reporting during it. + if (Parameters.DryRunBuild) + { + opt |= BuildAssetBundleOptions.DryRunBuild; + return opt; + } + if (Parameters.CompressOption == ECompressOption.Uncompressed) opt |= BuildAssetBundleOptions.UncompressedAssetBundle; else if (Parameters.CompressOption == ECompressOption.LZ4) @@ -107,7 +113,8 @@ namespace YooAsset.Editor { new TaskPrepare(), //前期准备工作 new TaskGetBuildMap(), //获取构建列表 - new TaskBuilding(), //开始执行构建 + new TaskBuilding(), //开始执行构建 + new TaskVerifyBuildResult(), //验证构建结果 new TaskEncryption(), //加密资源文件 new TaskCreatePatchManifest(), //创建清单文件 new TaskCreateReport(), //创建报告文件 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs index b11008e..b7d54a4 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildParameters.cs @@ -46,6 +46,11 @@ namespace YooAsset.Editor public IEncryptionServices EncryptionServices; + /// + /// 演练构建模式 + /// + public bool DryRunBuild; + /// /// 强制重新构建整个项目,如果为FALSE则是增量打包 /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs index 8957d18..4fb2ce6 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildReport/ReportSummary.cs @@ -59,6 +59,7 @@ namespace YooAsset.Editor public string EncryptionServicesClassName; // 构建参数 + public bool DryRunBuild; public bool ForceRebuild; public string BuildinTags; public ECompressOption CompressOption; diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildRunner.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildRunner.cs index f259af3..9c2ef75 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildRunner.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildSystem/BuildRunner.cs @@ -28,7 +28,8 @@ namespace YooAsset.Editor } catch (Exception e) { - Debug.LogError($"Build task {task.GetType().Name} failed : {e}"); + Debug.LogError($"Build task {task.GetType().Name} failed !"); + Debug.LogError($"Detail error : {e}"); succeed = false; break; } diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskBuilding.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskBuilding.cs index 4de9dad..74821e3 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskBuilding.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskBuilding.cs @@ -31,164 +31,29 @@ namespace YooAsset.Editor context.SetContextObject(unityManifestContext); // 拷贝原生文件 + if (buildParametersContext.Parameters.DryRunBuild == false) + { + CopyRawBundle(buildMapContext, buildParametersContext); + } + } + + /// + /// 拷贝原生文件 + /// + private void CopyRawBundle(BuildMapContext buildMapContext, AssetBundleBuilder.BuildParametersContext buildParametersContext) + { foreach (var bundleInfo in buildMapContext.BundleInfos) { if (bundleInfo.IsRawFile) { string dest = $"{buildParametersContext.PipelineOutputDirectory}/{bundleInfo.BundleName}"; - foreach(var buildAsset in bundleInfo.BuildinAssets) + foreach (var buildAsset in bundleInfo.BuildinAssets) { - if(buildAsset.IsRawAsset) + if (buildAsset.IsRawAsset) EditorTools.CopyFile(buildAsset.AssetPath, dest, true); } } } - - // 验证构建结果 - if (buildParametersContext.Parameters.VerifyBuildingResult) - { - VerifyingBuildingResult(context, unityManifest); - } - } - - /// - /// 验证构建结果 - /// - private void VerifyingBuildingResult(BuildContext context, AssetBundleManifest unityManifest) - { - var buildParameters = context.GetContextObject(); - var buildMapContext = context.GetContextObject(); - string[] buildedBundles = unityManifest.GetAllAssetBundles(); - - // 1. 过滤掉原生Bundle - List expectBundles = new List(buildedBundles.Length); - foreach(var bundleInfo in buildMapContext.BundleInfos) - { - if (bundleInfo.IsRawFile == false) - expectBundles.Add(bundleInfo); - } - - // 2. 验证数量 - if (buildedBundles.Length != expectBundles.Count) - { - Debug.LogWarning($"构建过程中可能存在无效的资源,导致和预期构建的Bundle数量不一致!"); - } - - // 3. 正向验证Bundle - foreach (var bundleName in buildedBundles) - { - if (buildMapContext.IsContainsBundle(bundleName) == false) - { - throw new Exception($"Should never get here !"); - } - } - - // 4. 反向验证Bundle - bool isPass = true; - foreach (var expectBundle in expectBundles) - { - bool isMatch = false; - foreach (var buildedBundle in buildedBundles) - { - if (buildedBundle == expectBundle.BundleName) - { - isMatch = true; - break; - } - } - if (isMatch == false) - { - isPass = false; - Debug.LogWarning($"没有找到预期构建的Bundle文件 : {expectBundle.BundleName}"); - } - } - if(isPass == false) - { - throw new Exception("构建结果验证没有通过,请参考警告日志!"); - } - - // 5. 验证Asset - int progressValue = 0; - foreach (var buildedBundle in buildedBundles) - { - string filePath = $"{buildParameters.PipelineOutputDirectory}/{buildedBundle}"; - string[] allBuildinAssetPaths = GetAssetBundleAllAssets(filePath); - string[] expectBuildinAssetPaths = buildMapContext.GetBuildinAssetPaths(buildedBundle); - if (expectBuildinAssetPaths.Length != allBuildinAssetPaths.Length) - { - Debug.LogWarning($"构建的Bundle文件内的资源对象数量和预期不匹配 : {buildedBundle}"); - isPass = false; - continue; - } - - foreach (var buildinAssetPath in allBuildinAssetPaths) - { - var guid = AssetDatabase.AssetPathToGUID(buildinAssetPath); - if (string.IsNullOrEmpty(guid)) - { - Debug.LogWarning($"无效的资源路径,请检查路径是否带有特殊符号或中文:{buildinAssetPath}"); - isPass = false; - continue; - } - - bool isMatch = false; - foreach (var exceptBuildAssetPath in expectBuildinAssetPaths) - { - var guidExcept = AssetDatabase.AssetPathToGUID(exceptBuildAssetPath); - if (guid == guidExcept) - { - isMatch = true; - break; - } - } - if (isMatch == false) - { - Debug.LogWarning($"在构建的Bundle文件里发现了没有匹配的资源对象:{buildinAssetPath}"); - isPass = false; - continue; - } - } - - EditorTools.DisplayProgressBar("验证构建结果", ++progressValue, buildedBundles.Length); - } - EditorTools.ClearProgressBar(); - if (isPass == false) - { - throw new Exception("构建结果验证没有通过,请参考警告日志!"); - } - - // 卸载所有加载的Bundle - Debug.Log("构建结果验证成功!"); - } - - /// - /// 解析.manifest文件并获取资源列表 - /// - private string[] GetAssetBundleAllAssets(string filePath) - { - string manifestFilePath = $"{filePath}.manifest"; - List assetLines = new List(); - using (StreamReader reader = File.OpenText(manifestFilePath)) - { - string content; - bool findTarget = false; - while (null != (content = reader.ReadLine())) - { - if (content.StartsWith("Dependencies:")) - break; - if (findTarget == false && content.StartsWith("Assets:")) - findTarget = true; - if (findTarget) - { - if (content.StartsWith("- ")) - { - string assetPath = content.TrimStart("- ".ToCharArray()); - assetLines.Add(assetPath); - } - } - } - } - return assetLines.ToArray(); } } } \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCopyBuildinFiles.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCopyBuildinFiles.cs index 7d17483..2f1efb1 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCopyBuildinFiles.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCopyBuildinFiles.cs @@ -15,7 +15,7 @@ namespace YooAsset.Editor { // 注意:我们只有在强制重建的时候才会拷贝 var buildParameters = context.GetContextObject(); - if (buildParameters.Parameters.ForceRebuild) + if (buildParameters.Parameters.DryRunBuild == false && buildParameters.Parameters.ForceRebuild) { // 清空流目录 AssetBundleBuilderHelper.ClearStreamingAssetsFolder(); diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchManifest.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchManifest.cs index 886b2f3..a29a15e 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchManifest.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchManifest.cs @@ -62,14 +62,14 @@ namespace YooAsset.Editor // 内置标记列表 List buildinTags = buildParameters.Parameters.GetBuildinTags(); + bool dryRunBuild = buildParameters.Parameters.DryRunBuild; foreach (var bundleInfo in buildMapContext.BundleInfos) { var bundleName = bundleInfo.BundleName; string filePath = $"{buildParameters.PipelineOutputDirectory}/{bundleName}"; - string hash = HashUtility.FileMD5(filePath); - string crc32 = HashUtility.FileCRC32(filePath); - long size = FileUtility.GetFileSize(filePath); - int version = buildParameters.Parameters.BuildVersion; + string hash = GetFileHash(filePath, dryRunBuild); + string crc32 = GetFileCRC(filePath, dryRunBuild); + long size = GetFileSize(filePath, dryRunBuild); string[] tags = buildMapContext.GetAssetTags(bundleName); bool isEncrypted = encryptionContext.IsEncryptFile(bundleName); bool isBuildin = IsBuildinBundle(tags, buildinTags); @@ -101,6 +101,27 @@ namespace YooAsset.Editor } return false; } + private string GetFileHash(string filePath, bool dryRunBuild) + { + if (dryRunBuild) + return "00000000000000000000000000000000"; //32位 + else + return HashUtility.FileMD5(filePath); + } + private string GetFileCRC(string filePath, bool dryRunBuild) + { + if (dryRunBuild) + return "00000000"; //8位 + else + return HashUtility.FileCRC32(filePath); + } + private long GetFileSize(string filePath, bool dryRunBuild) + { + if (dryRunBuild) + return 0; + else + return FileUtility.GetFileSize(filePath); + } /// /// 获取资源列表 diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchPackage.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchPackage.cs index ca3f5e1..bc0eedc 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchPackage.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreatePatchPackage.cs @@ -11,7 +11,10 @@ namespace YooAsset.Editor void IBuildTask.Run(BuildContext context) { var buildParameters = context.GetContextObject(); - CopyPatchFiles(buildParameters); + if (buildParameters.Parameters.DryRunBuild == false) + { + CopyPatchFiles(buildParameters); + } } /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs index 5ec5800..e472f62 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskCreateReport.cs @@ -35,8 +35,9 @@ namespace YooAsset.Editor buildReport.Summary.ShadersBundleName = AssetBundleGrouperSettingData.Setting.ShadersBundleName; buildReport.Summary.EncryptionServicesClassName = buildParameters.Parameters.EncryptionServices == null ? "null" : buildParameters.Parameters.EncryptionServices.GetType().FullName; - + // 构建参数 + buildReport.Summary.DryRunBuild = buildParameters.Parameters.DryRunBuild; buildReport.Summary.ForceRebuild = buildParameters.Parameters.ForceRebuild; buildReport.Summary.BuildinTags = buildParameters.Parameters.BuildinTags; buildReport.Summary.CompressOption = buildParameters.Parameters.CompressOption; diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs index e9d840f..6804b3a 100644 --- a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskEncryption.cs @@ -26,9 +26,18 @@ namespace YooAsset.Editor var buildParameters = context.GetContextObject(); var buildMapContext = context.GetContextObject(); - EncryptionContext encryptionContext = new EncryptionContext(); - encryptionContext.EncryptList = EncryptFiles(buildParameters, buildMapContext); - context.SetContextObject(encryptionContext); + if (buildParameters.Parameters.DryRunBuild) + { + EncryptionContext encryptionContext = new EncryptionContext(); + encryptionContext.EncryptList = new List(); + context.SetContextObject(encryptionContext); + } + else + { + EncryptionContext encryptionContext = new EncryptionContext(); + encryptionContext.EncryptList = EncryptFiles(buildParameters, buildMapContext); + context.SetContextObject(encryptionContext); + } } /// diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskVerifyBuildResult.cs b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskVerifyBuildResult.cs new file mode 100644 index 0000000..ea28328 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskVerifyBuildResult.cs @@ -0,0 +1,168 @@ +using System; +using System.Linq; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace YooAsset.Editor +{ + public class TaskVerifyBuildResult : IBuildTask + { + void IBuildTask.Run(BuildContext context) + { + var buildParametersContext = context.GetContextObject(); + var unityManifestContext = context.GetContextObject(); + + // 验证构建结果 + if (buildParametersContext.Parameters.VerifyBuildingResult) + { + VerifyingBuildingResult(context, unityManifestContext.UnityManifest); + } + } + + /// + /// 验证构建结果 + /// + private void VerifyingBuildingResult(BuildContext context, AssetBundleManifest unityManifest) + { + var buildParameters = context.GetContextObject(); + var buildMapContext = context.GetContextObject(); + string[] buildedBundles = unityManifest.GetAllAssetBundles(); + + // 1. 过滤掉原生Bundle + List expectBundles = new List(buildedBundles.Length); + foreach(var bundleInfo in buildMapContext.BundleInfos) + { + if (bundleInfo.IsRawFile == false) + expectBundles.Add(bundleInfo); + } + + // 2. 验证数量 + if (buildedBundles.Length != expectBundles.Count) + { + Debug.LogWarning($"构建过程中可能存在无效的资源,导致和预期构建的Bundle数量不一致!"); + } + + // 3. 正向验证Bundle + foreach (var bundleName in buildedBundles) + { + if (buildMapContext.IsContainsBundle(bundleName) == false) + { + throw new Exception($"Should never get here !"); + } + } + + // 4. 反向验证Bundle + bool isPass = true; + foreach (var expectBundle in expectBundles) + { + bool isMatch = false; + foreach (var buildedBundle in buildedBundles) + { + if (buildedBundle == expectBundle.BundleName) + { + isMatch = true; + break; + } + } + if (isMatch == false) + { + isPass = false; + Debug.LogWarning($"没有找到预期构建的Bundle文件 : {expectBundle.BundleName}"); + } + } + if(isPass == false) + { + throw new Exception("构建结果验证没有通过,请参考警告日志!"); + } + + // 5. 验证Asset + if(buildParameters.Parameters.DryRunBuild == false) + { + int progressValue = 0; + foreach (var buildedBundle in buildedBundles) + { + string filePath = $"{buildParameters.PipelineOutputDirectory}/{buildedBundle}"; + string[] allBuildinAssetPaths = GetAssetBundleAllAssets(filePath); + string[] expectBuildinAssetPaths = buildMapContext.GetBuildinAssetPaths(buildedBundle); + if (expectBuildinAssetPaths.Length != allBuildinAssetPaths.Length) + { + Debug.LogWarning($"构建的Bundle文件内的资源对象数量和预期不匹配 : {buildedBundle}"); + isPass = false; + continue; + } + + foreach (var buildinAssetPath in allBuildinAssetPaths) + { + var guid = AssetDatabase.AssetPathToGUID(buildinAssetPath); + if (string.IsNullOrEmpty(guid)) + { + Debug.LogWarning($"无效的资源路径,请检查路径是否带有特殊符号或中文:{buildinAssetPath}"); + isPass = false; + continue; + } + + bool isMatch = false; + foreach (var exceptBuildAssetPath in expectBuildinAssetPaths) + { + var guidExcept = AssetDatabase.AssetPathToGUID(exceptBuildAssetPath); + if (guid == guidExcept) + { + isMatch = true; + break; + } + } + if (isMatch == false) + { + Debug.LogWarning($"在构建的Bundle文件里发现了没有匹配的资源对象:{buildinAssetPath}"); + isPass = false; + continue; + } + } + + EditorTools.DisplayProgressBar("验证构建结果", ++progressValue, buildedBundles.Length); + } + EditorTools.ClearProgressBar(); + if (isPass == false) + { + throw new Exception("构建结果验证没有通过,请参考警告日志!"); + } + } + + // 卸载所有加载的Bundle + Debug.Log("构建结果验证成功!"); + } + + /// + /// 解析.manifest文件并获取资源列表 + /// + private string[] GetAssetBundleAllAssets(string filePath) + { + string manifestFilePath = $"{filePath}.manifest"; + List assetLines = new List(); + using (StreamReader reader = File.OpenText(manifestFilePath)) + { + string content; + bool findTarget = false; + while (null != (content = reader.ReadLine())) + { + if (content.StartsWith("Dependencies:")) + break; + if (findTarget == false && content.StartsWith("Assets:")) + findTarget = true; + if (findTarget) + { + if (content.StartsWith("- ")) + { + string assetPath = content.TrimStart("- ".ToCharArray()); + assetLines.Add(assetPath); + } + } + } + } + return assetLines.ToArray(); + } + } +} \ No newline at end of file diff --git a/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskVerifyBuildResult.cs.meta b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskVerifyBuildResult.cs.meta new file mode 100644 index 0000000..14d6cd1 --- /dev/null +++ b/Assets/YooAsset/Editor/AssetBundleBuilder/BuildTasks/TaskVerifyBuildResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b883ac0c3c25e8143847a9326e2961cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.cs index e9da48d..586d882 100644 --- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.cs @@ -234,7 +234,7 @@ namespace YooAsset.Editor label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; - label.style.width = 250; + label.style.width = 280; element.Add(label); } diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.uxml b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.uxml index facc4b3..3771057 100644 --- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.uxml +++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/AssetListReporterViewer.uxml @@ -11,7 +11,7 @@ - + diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.cs index c83d035..56db149 100644 --- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.cs @@ -145,7 +145,7 @@ namespace YooAsset.Editor label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; - label.style.width = 250; + label.style.width = 280; element.Add(label); } @@ -237,7 +237,7 @@ namespace YooAsset.Editor label.style.unityTextAlign = TextAnchor.MiddleLeft; label.style.marginLeft = 3f; //label.style.flexGrow = 1f; - label.style.width = 250; + label.style.width = 280; element.Add(label); } diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.uxml b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.uxml index 754b497..2c8b222 100644 --- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.uxml +++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/BundleListReporterViewer.uxml @@ -4,7 +4,7 @@ - + @@ -13,7 +13,7 @@ - + diff --git a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs index 6ffc527..6b36904 100644 --- a/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs +++ b/Assets/YooAsset/Editor/AssetBundleReporter/VisualViewers/SummaryReporterViewer.cs @@ -76,6 +76,7 @@ namespace YooAsset.Editor _items.Add(new ItemWrapper(string.Empty, string.Empty)); _items.Add(new ItemWrapper("构建参数", string.Empty)); + _items.Add(new ItemWrapper("DryRunBuild", $"{buildReport.Summary.DryRunBuild}")); _items.Add(new ItemWrapper("ForceRebuild", $"{buildReport.Summary.ForceRebuild}")); _items.Add(new ItemWrapper("BuildinTags", $"{buildReport.Summary.BuildinTags}")); _items.Add(new ItemWrapper("CompressOption", $"{buildReport.Summary.CompressOption}"));