private void DoWork(object sender, DoWorkEventArgs e) { SetEnable(false); var dateFileStr = DateTime.Now.ToString("yyyy-MM-dd HH"); var retVal = string.Empty; var richText = new Utils.RichTextBoxUtils(this.rtbMessage); richText.Write("==========发布程序开始=========="); //修改/Config/SystemConfig.config版本号 retVal = UpateVersion(richText); if (VerifyResult(retVal)) { return; } //发布解决方案 retVal = Publish(richText); if (VerifyResult(retVal)) { return; } //移除配置 retVal = RemoveConfig(richText); if (VerifyResult(retVal)) { return; } //打包发布文件 retVal = Pack(richText, dateFileStr); if (VerifyResult(retVal)) { return; } //先导出数据配置 if (chkDataExport.Checked) { retVal = DataExport(richText, dateFileStr); if (VerifyResult(retVal)) { return; } } //后备份源码 retVal = BackupSourceCode(richText); if (VerifyResult(retVal)) { return; } richText.Write("==========发布程序完成=========="); }
//发布解决方案 private string Publish(Utils.RichTextBoxUtils richText) { var retVal = string.Empty; richText.Write("正在发布解决方案"); try { var sln = txtSln.Text; var publishDir = txtPublishProfiles.Text; var webProjectOutputDir = Path.Combine(publishDir, "Artifact"); var outDir = Path.Combine(publishDir, "bin"); var use32BitMsBuild = false; var useDebug = false; if (Directory.Exists(publishDir)) { var dir = new DirectoryInfo(publishDir); dir.Delete(true); } var script = File.ReadAllText(@"PSScript\PSPulish.ps1"); using (Runspace runspace = RunspaceFactory.CreateRunspace()) { runspace.Open(); PowerShell ps = PowerShell.Create(); ps.Runspace = runspace; ps.AddScript(script); ps.Invoke(); ps.AddCommand("InvokeMsBuild").AddParameters( new Dictionary <string, object>() { { "Path", sln }, { "WebProjectOutputDir", webProjectOutputDir }, { "OutDir", outDir }, { "Use32BitMsBuild", use32BitMsBuild }, { "UseDebug", useDebug } } ); foreach (var result in ps.Invoke()) { retVal += result; } richText.Write("发布解决方案完成" + retVal); } } catch (Exception ex) { retVal = "执行InvokeMsBuild出错:" + ex.Message; richText.Write("发布解决方案错误:" + retVal); } return(retVal); }
// 源码备份 private string BackupSourceCode(Utils.RichTextBoxUtils richText) { var retVal = string.Empty; var notDirName = ".vs"; //vs开发工具配置文件,过滤不备份 try { var backDir = txtBackUpDir.Text; if (string.IsNullOrEmpty(backDir)) { return(retVal); } richText.Write("正在备份源码"); var sln = txtSln.Text; var dir = Directory.GetParent(sln); var from = dir.FullName; var fileName = Path.GetFileNameWithoutExtension(sln); var to = Path.Combine(txtBackUpDir.Text, fileName + DateTime.Now.ToString("yyyy-MM-dd HH") + ".zip"); retVal = ArchiveFromTo(from, to, notDirName); //ZipHelper.ZipFileDirectory(from, to); //ArchiveFromTo(from, to, notDirName); if (!string.IsNullOrEmpty(retVal)) { richText.Write("源码备份出错: " + retVal); } richText.Write("备份源码完成"); } catch (Exception ex) { retVal = "源码备份出错:" + ex.Message; richText.Write("备份源码错误:" + retVal); } return(retVal); }
//打包发布文件 private string Pack(Utils.RichTextBoxUtils richText, string dateFileStr) { richText.Write("正在打包发布文件"); var retVal = string.Empty; try { var dirPublish = Path.Combine(txtPublishProfiles.Text, "Artifact"); var xmlPath = Path.Combine(dirPublish, "Config", "SystemConfig.config"); XmlDocument xml = new XmlDocument(); xml.Load(xmlPath);//读取文件地址 var softVersion = xml.DocumentElement.GetElementsByTagName("SoftVersion")[0].InnerText; if (string.IsNullOrEmpty(softVersion)) { softVersion = DateTime.Now.ToString("yyyymmddhhmmss"); } softVersion = "V" + softVersion; var dateFileDirStr = Path.Combine(txtPublishProfiles.Text, dateFileStr); CreateDirNot(dateFileDirStr); var to = Path.Combine(dateFileDirStr, softVersion + ".zip"); retVal = ArchiveFromTo(dirPublish, to); if (!string.IsNullOrEmpty(retVal)) { richText.Write("打包发布文件错误:" + retVal); } richText.Write("打包发布文件完成"); } catch (Exception ex) { retVal = "打包发布文件出错:" + ex.Message; richText.Write("打包发布文件错误:" + retVal); } return(retVal); }
//修改/Config/SystemConfig.config版本号 private string UpateVersion(Utils.RichTextBoxUtils richText) { var retVal = string.Empty; richText.Write("正在修改版本号"); try { //解决方案路径 var sln = txtSln.Text; //解决方案目录 var dirSln = Path.GetDirectoryName(sln); //hy.Web/Config/SystemConfig.config var pathVersion = Path.Combine(dirSln, "hy.Web", "Config", "SystemConfig.config"); //xml加载 XmlDocument xml = new XmlDocument(); xml.Load(pathVersion); //获取旧版本信息 var softVersion = xml.DocumentElement.GetElementsByTagName("SoftVersion")[0].InnerText; //当前时间 var dateTime = DateTime.Now; //最新版本号 var v = $"{softVersion.Split('.')[0]}.{dateTime.ToString("yy.MM.ddHH")}"; //1.20.08.0511 大版本.年.月.日时 xml.DocumentElement.GetElementsByTagName("SoftVersion")[0].InnerText = v; //保存修改值 xml.Save(pathVersion); richText.Write("修改版本号完成."); } catch (Exception ex) { retVal = "执行修改版本号出错:" + ex.Message; richText.Write("修改版本号:" + retVal); } return(retVal); }
// 删除配置文件 private string RemoveConfig(Utils.RichTextBoxUtils richText) { string retVal = string.Empty; var listRemoveDir = new List <string> { "App_Data" }; var listConfigDirConfig = System.Configuration.ConfigurationManager.AppSettings["deleteFiles"].Split(',').ToList(); var listRemove = new List <string>(); listRemove.AddRange(listRemoveDir); listRemove.AddRange(listConfigDirConfig); richText.Write(string.Format("正在删除配置,{0}", string.Join(",", listRemove))); #region 需要删除的目录下的文件 List <FileConfiDTO> DirFileConfig = new List <FileConfiDTO>(); foreach (string str in listConfigDirConfig) { string[] arr = str.Split('/'); if (arr.Length > 2) { retVal = $"文件配置错误,应该使用 / 隔开,只支持一级目录:{str}"; richText.Write("删除配置错误:" + retVal); return(retVal); } FileConfiDTO model = new FileConfiDTO(); if (arr.Length == 1) { model.DirName = ""; model.FileName = arr[0]; } else if (arr.Length == 2) { model.DirName = arr[0]; model.FileName = arr[1]; } DirFileConfig.Add(model); } #endregion try { var dirArtifact = Path.Combine(txtPublishProfiles.Text, "Artifact"); var dirFileInfo = new DirectoryInfo(dirArtifact); var dirFiles = dirFileInfo.GetFiles(); if (dirFiles != null && dirFiles.Count() > 0) { #region 除根目录的配置文件 foreach (var item in dirFiles) { #region 除根目录的配置文件 foreach (var en in DirFileConfig) { if (string.IsNullOrEmpty(en.DirName)) { if (item.Name.ToLower() == en.FileName.ToLower()) { item.Delete(); } } } #endregion } #endregion } var dirs = dirFileInfo.GetDirectories(); if (dirs != null && dirs.Count() > 0) { foreach (var dir in dirs) { #region 除文件夹 if (listRemoveDir.Contains(dir.Name)) { dir.Delete(true); } #endregion #region 除 一级目录下面的文件 foreach (var en in DirFileConfig) { if (en.DirName.ToLower() == dir.Name.ToLower()) { var dirConfigFiles = dir.GetFiles(); if (dirConfigFiles != null && dirConfigFiles.Count() > 0) { foreach (var item in dirConfigFiles) { if (item.Name.ToLower() == en.FileName.ToLower()) { item.Delete(); } } } } } #endregion } } richText.Write("删除配置完成"); } catch (Exception ex) { retVal = "删除配置文件失败:" + ex.Message; richText.Write("删除配置错误:" + retVal); } return(retVal); }