/// <summary> /// 根据文件清单生成压缩包 /// </summary> /// <param name="dev"></param> /// <param name="item"></param> /// <param name="type"></param> public static void GenerateCompressedPackage(bool dev, PublishDirInfo item, AppDownloadType type) { var fileEx = GetFileExByCompressedType(type); var packPath = GetPackPath(dev, item, fileEx); Console.WriteLine($"正在生成压缩包:{packPath}"); IOPath.FileIfExistsItDelete(packPath); GetCreatePackByCompressedType(type)(packPath, item.Files); using var fileStream = File.OpenRead(packPath); var sha256 = Hashs.String.SHA256(fileStream); var fileInfoM = new PublishFileInfo { SHA256 = sha256, Length = fileStream.Length, Path = packPath, }; if (item.BuildDownloads.ContainsKey(type)) { item.BuildDownloads[type] = fileInfoM; } else { item.BuildDownloads.Add(type, fileInfoM); } }
public static void Add(RootCommand command, AppDownloadType type, string name) { var comm = new Command(name, "8. (本地)读取上一步操作后的 Publish.json 生成压缩包并计算哈希值写入 Publish.json") { Handler = CommandHandler.Create(async(bool dev, string buildpackage) => { if (!string.IsNullOrEmpty(buildpackage)) { buildpackage = buildpackage.Trim(); buildpackage = buildpackage.Length > 7 ? buildpackage[..7] : buildpackage; Version = buildpackage; } var publish_json_path = PublishJsonFilePath; var publish_json_str = File.ReadAllText(publish_json_path); var dirNames = Serializable.DJSON <PublishDirInfo[]>(publish_json_str); if (!dirNames.Any_Nullable()) { Console.WriteLine($"错误:发布配置文件读取失败!{publish_json_path}"); return; } dirNames = dirNames.ThrowIsNull(nameof(dirNames)); var parallelTasks = dirNames.Select(x => Task.Run(() => Step_cd.GenerateCompressedPackage(dev, x, type))).ToList(); await Task.WhenAll(parallelTasks); SavePublishJson(dirNames, removeFiles: false); Console.WriteLine("完成"); })
/// <summary> /// 根据压缩包类型获取文件扩展名 /// </summary> /// <param name="compressedType"></param> /// <returns></returns> /// <exception cref="ArgumentOutOfRangeException"></exception> static string GetFileExByCompressedType(AppDownloadType compressedType) => compressedType switch {