using ExtendUI.FTPManager; using Newtonsoft.Json.Linq; using ryCommon; using ryCommonDb; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.Design; using System.Data; using System.Diagnostics; using System.Linq; using System.Runtime.ConstrainedExecution; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.Linq; namespace 开发辅助工具.Manager { class RyProject { /// /// C#基准项目路径 /// public string CshapeBasePath { get; private set; } = ""; /// /// 引用dll文件夹列表 /// public string ReferenceDllPath { get; private set; } = ""; /// /// 是否将dll复制到Bin目录,并修改引用 /// public bool CopyDllToBin { get; set; } = false; /// /// Bin目录相对于项目文件所在的位置,可使用相对路径或绝对路径 /// public string BinFolder { get; set; } = "..\\..\\Bin"; /// /// 是否修改输出路径 /// public bool ChangedOutputPath { get; set; } =true; public delegate void StringEventHandler(object sender, string e); /// /// 状态变化时激发 /// [Description("状态变化时激发")] public event StringEventHandler OnStateChanged; public RyProject() { UpdateSetting(); } /// /// 更新设置 /// public void UpdateSetting() { DataProvider mydb = new DataProvider(); IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) { var ds = db.ReadData("select * from Settings where name='Setting'"); if (mydb.HaveData(ds)) { var row = mydb.GetData(ds); ryCommon.Storage mStor = new ryCommon.Storage(row["value"].ToString()); mStor.SelectNodeBySet(); CshapeBasePath = mStor.GetAttrValue("CshapeBasePath"); ReferenceDllPath = mStor.GetAttrValue("ReferenceDll"); } } db.Free(); } /// /// 通过dll路径来寻找dll路径 /// /// /// public string GetDllPath(string dll_full_path) { return GetDllPath("", dll_full_path); } /// /// 通过dll名称来寻找dll路径 /// /// 为空则表示根目录下查找,否则查找子目录 /// /// public string GetDllPath(string dll_foldername,string dll_full_path) { var dll_name = System.IO.Path.GetFileName(dll_full_path); var path_list = ReferenceDllPath.Replace("\r", "").Split('\n'); //var find = false; var result = ""; var Min_Ver = RySoft.GetVersionStr(dll_full_path); var Min_dt=RyFiles.GetFileDate(dll_full_path); #region 在引用文件夹查找是否有该dll,有则使用引用文件夹里的dll for (int m = 0; m < path_list.Length; m++) { if (path_list[m].Trim().Length==0) { continue; } var path = path_list[m].Trim('\\'); if (dll_foldername.Length > 0) { path += "\\" + dll_foldername; } if (!System.IO.Directory.Exists(path)) { continue; } var files = System.IO.Directory.GetFiles(path); for (int z = 0; z < files.Length; z++) { if (System.IO.Path.GetFileName(files[z]).ToLower() == dll_name.ToLower()) { var dll_ver = RySoft.GetVersionStr(files[z]); var compareVer = RySoft.CompareVer(Min_Ver, dll_ver); if (compareVer < 0)//引用位置版本比较老,直接忽略 { continue; } else if (compareVer == 0)//引用位置版本一致,则看更新时间 { var file_dt=RyFiles.GetFileDate(files[z]); if (file_dt.LastWriteTime <= Min_dt.LastWriteTime) { continue; } else { Min_dt=file_dt; } } else if(compareVer==-1000) { continue; } else { Min_dt = RyFiles.GetFileDate(files[z]); } result = files[z]; Min_Ver=dll_ver; //find = true; } } //if (find) { break; } } #endregion return result; } /// /// 相对路径转绝对路径,相对项目文件的路径 /// /// public string RelToAbsPath(string project_path,string rel_path) { string folder = System.IO.Path.GetDirectoryName(project_path); var _rel_path = rel_path; while (true) { if (_rel_path.IndexOf("..\\") == 0) { folder = System.IO.Path.GetDirectoryName(folder.TrimEnd('\\')); _rel_path = _rel_path.Substring(3); } else { break; } if (folder == "") { break; } } return folder+"\\"+ _rel_path; } /// /// 绝对路径转相对路径,相对项目文件的路径 /// /// public string AbsToRelPath(string project_path, string abs_path) { string folder = System.IO.Path.GetDirectoryName(project_path); var _rel_path = ""; var _rel_path2 = ""; while (true) { if (abs_path.IndexOfEx(folder) == 0) { if (_rel_path2 == "") { _rel_path = abs_path.Substring(folder.Length); } else { _rel_path = _rel_path2.TrimEnd('\\') + abs_path.Substring(folder.Length); } break; } else { folder = System.IO.Path.GetDirectoryName(folder.TrimEnd('\\')); _rel_path2 += "..\\"; } if (folder == "") { break; } } return _rel_path; } /// /// 更新dll版本,如果全部复制成功,则返回0,否则返回错误个数 /// public int UpdateDlls(string folder,out string error_str) { var _error_str = ""; int error = 0; Updates("",folder); Updates("x86", folder+"\\x86"); Updates("x64", folder + "\\x64"); void Updates(string foldername,string _path) { if (!System.IO.Directory.Exists(_path)) { return; } var files = System.IO.Directory.GetFiles(_path, "*.dll"); for (int i = 0; i < files.Length; i++) { string filename = System.IO.Path.GetFileName(files[i]); var dllpath = GetDllPath(foldername, files[i]); if (dllpath.Length>0) { if (filename.ToLower() == "System.Data.SQLite.dll".ToLower()) { RyFiles.CreateDirectory(_path + "\\x86"); RyFiles.CreateDirectory(_path + "\\x64"); var sourch_folder = System.IO.Path.GetDirectoryName(dllpath); if (RyFiles.CopyFolder(sourch_folder + "\\x86", _path + "\\x86\\") != 0) { _error_str += sourch_folder + "\\x86\\*\r\n"; error++; } if (RyFiles.CopyFolder(sourch_folder + "\\x64\\", _path + "\\x64\\") != 0) { _error_str += sourch_folder + "\\x64\\*\r\n"; error++; } } if (dllpath!= files[i] && !RyFiles.CopyBigFile(dllpath, files[i])) { _error_str += files[i]+ "\r\n"; error++; } var dll_xml_path = System.IO.Path.GetDirectoryName(dllpath) +"\\"+ System.IO.Path.GetFileNameWithoutExtension(dllpath) + ".xml"; if (System.IO.File.Exists(dll_xml_path)) { var to_xml_path = System.IO.Path.GetDirectoryName(files[i]) + "\\" + System.IO.Path.GetFileNameWithoutExtension(files[i]) + ".xml"; if (dll_xml_path.ToLower()!=to_xml_path.ToLower() && !RyFiles.CopyBigFile(dll_xml_path, to_xml_path)) { _error_str += files[i] + "\r\n"; error++; } } } } var dirs = System.IO.Directory.GetDirectories(_path); for (int i = 0; i < dirs.Length; i++) { Updates(foldername,dirs[i]); } } error_str = _error_str; return error; } /// /// 更新项目引用,定向为本地dll,如果全部复制成功,则返回0,否则返回错误个数 /// public int UpdateCSproj(string folder) { int error = 0; Updates(folder); void Updates(string _path) { var files = System.IO.Directory.GetFiles(_path, "*.csproj"); for (int i = 0; i < files.Length; i++) { SetCSproj(files[i], ""); } var dirs = System.IO.Directory.GetDirectories(_path); for (int i = 0; i < dirs.Length; i++) { Updates(dirs[i]); } } return error; } /// /// 自动设置csproj文件,将dll引用修改为指定区域的dll、修改命名空间 /// /// 项目文件(*.csproj) /// 项目英文名 public void SetCSproj(string path, string _project_Eng_name) { System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.Load(path); var xmlnsm = new XmlNamespaceManager(xml.NameTable); xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI); //var root = @"d:Project//d:ItemGroup//d:Reference"; if (_project_Eng_name != "") { SetValue(@"d:Project//d:PropertyGroup//d:RootNamespace", _project_Eng_name.Replace(" ", ""));//命名空间名 SetValue(@"d:Project//d:PropertyGroup//d:AssemblyName", _project_Eng_name.Replace(" ", ""));//程序集名称 } var OutputPath = GetValue(@"d:Project//d:PropertyGroup[2]//d:OutputPath").TrimEnd('\\')+"\\"; if (ChangedOutputPath) { SetValue(@"d:Project//d:PropertyGroup[2]//d:OutputPath", BinFolder.TrimEnd('\\') + "\\Debug\\"+ (_project_Eng_name==""?"": _project_Eng_name +"\\"));//Debug输出路径 SetValue(@"d:Project//d:PropertyGroup[3]//d:OutputPath", BinFolder.TrimEnd('\\') + "\\Release\\" + (_project_Eng_name == "" ? "" : _project_Eng_name + "\\"));//Release输出路径 } if (OutputPath == "") { OutputPath = BinFolder.TrimEnd('\\') + "\\Debug\\" + (_project_Eng_name == "" ? "" : _project_Eng_name + "\\"); } var list = xml.SelectNodes(@"d:Project//d:ItemGroup//d:Reference//d:HintPath", xmlnsm); for (int i = 0; i < list.Count; i++) { var HintPath = list[i].InnerText; var iPos = HintPath.LastIndexOf("\\"); if (iPos > 0) { var Reference_Name = HintPath.Substring(iPos + 1);//引用的dll名称 var full_path = RelToAbsPath(path, OutputPath + Reference_Name); var dll_path = GetDllPath(full_path); if (dll_path.Length>0) { if (CopyDllToBin) { list[i].InnerText = OutputPath + Reference_Name; RyFiles.CopyBigFile(dll_path, full_path); } else { list[i].InnerText = dll_path; } } } } var ProjectReference_list = xml.SelectNodes(@"d:Project//d:ItemGroup//d:ProjectReference", xmlnsm);//项目引用 for (int i = 0; i < ProjectReference_list.Count; i++) { var element = (XmlElement)ProjectReference_list[i]; var IncludePath = element.GetAttribute("Include"); var iPos = IncludePath.LastIndexOf("\\"); if (iPos > 0) { var Reference_FileName = IncludePath.Substring(iPos + 1).ToLower();//引用的项目文件名称 string dll_name = ""; if (Reference_FileName == "RaUIV4.csproj".ToLower()) { dll_name = "RaUI.dll"; } else if (Reference_FileName == "MyDbV4.csproj".ToLower()) { dll_name = "MyDb.dll"; } else if (Reference_FileName == "MyDb_SQLiteV4.csproj".ToLower()) { dll_name = "MyDb_SQLite.dll"; } else if (Reference_FileName == "ryControlsV4.csproj".ToLower()) { dll_name = "ryControls.dll"; } else if (Reference_FileName == "RyPrint.csproj".ToLower()) { dll_name = "RyPrint.dll"; } else if (Reference_FileName == "ryUpdateV4.csproj".ToLower()) { dll_name = "ryUpdate.dll"; } if (dll_name != "") { var fullpath = RelToAbsPath(path, OutputPath + dll_name); var dll_path = GetDllPath(fullpath); if (dll_path != "") { if (CopyDllToBin) { MoveReference(System.IO.Path.GetFileNameWithoutExtension(dll_name), fullpath); RyFiles.CopyBigFile(dll_path, fullpath); } else { MoveReference(System.IO.Path.GetFileNameWithoutExtension(dll_name), dll_path); } } } //将项目引用转换为dll引用 void MoveReference(string reference_name, string dll_path) { ProjectReference_list[i].ParentNode.RemoveChild(ProjectReference_list[i]); var node = xml.SelectSingleNode(@"d:Project//d:ItemGroup", xmlnsm); XmlNode childXmlNode = xml.CreateElement("Reference"); XmlNode childXmlNode2 = xml.CreateElement("HintPath"); childXmlNode2.InnerText = dll_path; childXmlNode.AppendChild(childXmlNode2); node.AppendChild(childXmlNode); XmlElement element2 = (XmlElement)childXmlNode; element2.SetAttribute("Include", reference_name); } } } xml.InnerXml = xml.InnerXml.Replace(" xmlns=\"\"", ""); xml.Save(path); string GetValue(string xpath) { var node = xml.SelectSingleNode(xpath, xmlnsm); if (node != null) { return node.InnerText; } return ""; } bool SetValue(string xpath, string value) { var node = xml.SelectSingleNode(xpath, xmlnsm); if (node != null) { node.InnerText = value; return true; } return false; } } /// /// 获取版本号 /// /// /// public string GetAssemblyVersion(string path) { var AssemblyInfo_Path = System.IO.Path.GetDirectoryName(path) + "\\Properties\\AssemblyInfo.cs"; if (System.IO.File.Exists(AssemblyInfo_Path)) { var AssemblyInfo = ryCommon.RyFiles.ReadAllLines(AssemblyInfo_Path); for (int i = 0; i < AssemblyInfo.Length; i++) { if (AssemblyInfo[i].StartsWith("//")) { continue; } if (AssemblyInfo[i].StartsWith("[assembly: AssemblyVersion")) { return AssemblyInfo[i].GetStr("AssemblyVersion(\"", "\")"); } } return ""; } else { return ""; } } /// /// 更新版本号 /// /// public static void UpdateVer(string AssemblyInfo_Path) { string AssemblyInfo_path = AssemblyInfo_Path; if (System.IO.File.Exists(AssemblyInfo_path)) { var ext = System.IO.Path.GetExtension(AssemblyInfo_path).ToLower(); string Revision_Ver = DateTime.Now.ToString("yyMM"); string Build_Ver = DateTime.Now.ToString("dd00"); if (ext == ".cs") { string[] AssemblyInfo_list = ryCommon.RyFiles.ReadAllLines(AssemblyInfo_path); string text = ""; for (int i = 0; i < AssemblyInfo_list.Length; i++) { string item = AssemblyInfo_list[i]; if (item.IndexOf("[assembly: AssemblyVersion(\"") == 0) { ChangeVer("[assembly: AssemblyVersion(\""); } else if (item.IndexOf("[assembly: AssemblyFileVersion(\"") == 0) { ChangeVer("[assembly: AssemblyFileVersion(\""); } if (text != "") { text += "\r\n"; } text += item; void ChangeVer(string id) { string ver = item.GetStr(id, "\")]", 0, out _, ""); if (ver != "") { string[] ver_list = ver.Split('.'); if (ver_list.Length == 4) { if (ver_list[2] != Revision_Ver) { ver = ver_list[0] + "." + ver_list[1] + "." + Revision_Ver + "." + (Build_Ver.ToInt() + 1).ToString("0000"); } else { if (ver_list[3].IndexOf(DateTime.Now.ToString("dd")) == 0) { ver = ver_list[0] + "." + ver_list[1] + "." + Revision_Ver + "." + (ver_list[3].ToInt() + 1).ToString("0000"); } else { ver = ver_list[0] + "." + ver_list[1] + "." + Revision_Ver + "." + (Build_Ver.ToInt() + 1).ToString("0000"); } } item = id + ver + "\")]"; } } } } ryCommon.RyFiles.WriteAllText(AssemblyInfo_path, text, Encoding.UTF8); } else if (ext == ".csproj") { System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.Load(AssemblyInfo_path); var xmlnsm = new XmlNamespaceManager(xml.NameTable); xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI); var root = @"d:Project//d:PropertyGroup//d:"; bool set_result= SetValue("Version"); if (!set_result) { var ver = "1.0." + Revision_Ver + "." + (Build_Ver.ToInt() + 1).ToString("0000"); XmlNode node_PropertyGroup = xml.CreateNode(XmlNodeType.Element, "PropertyGroup", xml.DocumentElement.NamespaceURI); xml.ChildNodes[0].PrependChild(node_PropertyGroup); SetValue2("Version", ver, "程序集版本号"); SetValue2("FileVersion", ver, "文件版本号,通常与程序集版本号相同"); SetValue2("ProductVersion", ver, "产品版本号"); SetValue2("AssemblyName", System.IO.Path.GetFileNameWithoutExtension(AssemblyInfo_path), "可选:程序集名称"); SetValue2("AssemblyTitle", "", "可选:程序集标题"); SetValue2("AssemblyDescription", "", "可选:程序集描述"); SetValue2("Company", "睿元网络", "可选:程序集公司"); SetValue2("Product", "", "可选:程序集产品"); SetValue2("Trademark", "紫林软件2008-" + DateTime.Now.Year, "可选:程序集商标"); void SetValue2(string name2, string ver2, string desc) { XmlComment tempNode_desc = xml.CreateComment(desc); tempNode_desc.InnerText = desc; XmlElement tempNode_node = xml.CreateElement(name2, xml.DocumentElement.NamespaceURI); tempNode_node.InnerText = ver2; node_PropertyGroup.AppendChild(tempNode_desc); node_PropertyGroup.AppendChild(tempNode_node); } } else { SetValue("FileVersion"); SetValue("ProductVersion"); } xml.Save(AssemblyInfo_path); bool SetValue(string name) { var node = xml.SelectSingleNode(root + name, xmlnsm); if (node != null) { var ver = node.InnerText; string[] ver_list = ver.Split('.'); if (ver_list.Length == 4) { if (ver_list[2] != Revision_Ver) { ver = ver_list[0] + "." + ver_list[1] + "." + Revision_Ver + "." + (Build_Ver.ToInt() + 1).ToString("0000"); } else { if (ver_list[3].IndexOf(DateTime.Now.ToString("dd")) == 0) { ver = ver_list[0] + "." + ver_list[1] + "." + Revision_Ver + "." + (ver_list[3].ToInt() + 1).ToString("0000"); } else { ver = ver_list[0] + "." + ver_list[1] + "." + Revision_Ver + "." + (Build_Ver.ToInt() + 1).ToString("0000"); } } } node.InnerText= ver; return true; } return false; } } } } /// /// 获取版本信息 /// /// public static VerInfo GetVerInfo(string AssemblyInfo_Path) { string AssemblyInfo_path = AssemblyInfo_Path; var ver = new VerInfo(); if (System.IO.File.Exists(AssemblyInfo_path)) { var ext = System.IO.Path.GetExtension(AssemblyInfo_path).ToLower(); if (ext == ".cs") { string[] AssemblyInfo_list = ryCommon.RyFiles.ReadAllLines(AssemblyInfo_path); for (int i = 0; i < AssemblyInfo_list.Length; i++) { string item = AssemblyInfo_list[i]; if (item.IndexOf("[assembly: AssemblyVersion(\"") == 0) { ver.Version = item.GetStr("[assembly: AssemblyVersion(\"", "\")]", 0, out _, "").Trim(); } else if (item.IndexOf("[assembly: AssemblyFileVersion(\"") == 0) { ver.FileVersion = item.GetStr("[assembly: AssemblyFileVersion(\"", "\")]", 0, out _, ""); } else if (item.IndexOf("[assembly: AssemblyTitle(\"") == 0) { ver.Title = item.GetStr("[assembly: AssemblyTitle(\"", "\")]", 0, out _, ""); } else if (item.IndexOf("[assembly: AssemblyDescription(\"") == 0) { ver.Description = item.GetStr("[assembly: AssemblyDescription(\"", "\")]", 0, out _, ""); } else if (item.IndexOf("[assembly: AssemblyCompany(\"") == 0) { ver.Company = item.GetStr("[assembly: AssemblyCompany(\"", "\")]", 0, out _, ""); } else if (item.IndexOf("[assembly: AssemblyProduct(\"") == 0) { ver.Product = item.GetStr("[assembly: AssemblyProduct(\"", "\")]", 0, out _, ""); } else if (item.IndexOf("[assembly: AssemblyCopyright(\"") == 0) { ver.Copyright = item.GetStr("[assembly: AssemblyCopyright(\"", "\")]", 0, out _, ""); } } } else if (ext == ".csproj") { try { System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); xml.Load(AssemblyInfo_path); var xmlnsm = new XmlNamespaceManager(xml.NameTable); xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI); var root = @"d:Project//d:PropertyGroup//d:"; ver.Version = GetValue("Version"); ver.FileVersion = GetValue("FileVersion"); ver.Title = GetValue("AssemblyTitle"); ver.Description = GetValue("AssemblyDescription"); ver.Company = GetValue("Company"); ver.Product = GetValue("Product"); ver.Copyright = GetValue("Trademark"); string GetValue(string name) { var node = xml.SelectSingleNode(root + name, xmlnsm); if (node != null) { return node.InnerText; } return ""; } } catch { } } } return ver; } /// /// 等待进程执行完毕 /// /// /// public string Read_Prog(string exe, string cmd_text) { String cmd = exe; Process p = new Process { StartInfo = new System.Diagnostics.ProcessStartInfo { FileName = cmd,//设定程序名 Arguments = cmd_text, UseShellExecute = false, //关闭shell的使用 RedirectStandardInput = true, //重定向标准输入 RedirectStandardOutput = true, //重定向标准输出 RedirectStandardError = false, //重定向错误输出 CreateNoWindow = true//设置不显示窗口 } }; p.Start(); string result = p.StandardOutput.ReadToEnd(); p.WaitForExit(20000); p.Close(); return result; } /// /// 进行打包 /// /// 项目根目录 /// 最简化打包 public void Pack(string project_folder,bool PackByLite=false) { BigFileOp file_op = new BigFileOp(); file_op.OnCanelCopy += File_op_OnCanelCopy; var com_mode = "Debug"; DataProvider mydb = new DataProvider(); IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType); if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1) { var ds = db.ReadData("select * from Settings where name='Setting'"); if (mydb.HaveData(ds)) { var row = mydb.GetData(ds); ryCommon.Storage mStor = new ryCommon.Storage(row["value"].ToString()); mStor.SelectNodeBySet(); var ReactorPath = mStor.GetAttrValue("ReactorPath"); var WinRARPath = mStor.GetAttrValue("WinRARPath"); if (WinRARPath == "") { if (System.IO.File.Exists(@"C:\Program Files\WinRAR\WinRAR.exe")) { WinRARPath = @"C:\Program Files\WinRAR\WinRAR.exe"; } } var ftpid = mStor.GetAttrValue("ftpid", 0); var ftp_remote_dir = mStor.GetAttrValue("ftp_remote_dir"); var bf_folder = project_folder; if (bf_folder != "") { ryCommon.Ini ini = new ryCommon.Ini(bf_folder + "\\查看项目.ryp"); var eng_name = ini.ReadIni("project", "engname"); var proglang = ini.ReadIni("project", "proglang"); var confuse = ini.ReadIni("project", "confuse",1); var upload_name = ini.ReadIni("project", "UploadName"); if (upload_name.Trim().Length == 0) { upload_name = eng_name; } var ouput_folder = bf_folder + "\\Bin\\" + com_mode + "\\" + eng_name; if(!System.IO.Directory.Exists(ouput_folder)) { ouput_folder = bf_folder + "\\Bin\\" + com_mode; } if (!System.IO.Directory.Exists(ouput_folder)) { ShowState("打包失败,生成目录不存在。"); return; } var file_ver = ""; if (System.IO.File.Exists(ouput_folder + "\\" + eng_name + ".exe")) { FileVersionInfo fileVerInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(ouput_folder + "\\" + eng_name + ".exe"); file_ver = fileVerInfo.ProductVersion; } if (proglang == "c#" && confuse==1) { ShowState("正在进行混淆..."); if (System.IO.File.Exists(bf_folder + "\\Bin\\混淆_" + com_mode + ".nrproj")) { var cmd = Read_Prog(ReactorPath, "-project \"" + bf_folder + "\\Bin\\混淆_" + com_mode + ".nrproj\""); MessageBox.Show(cmd, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } ShowState("正在清理不重要的缓存..."); ryCommon.RyFiles.DeleteFile(ouput_folder + "\\Secure\\*.pdb"); ShowState("复制混淆文件到底包目录..."); file_op.CopyFileOrFolder(ouput_folder + "\\Secure\\", bf_folder + "\\Publish\\OriginalFiles"+(PackByLite?"_Lite":"")+"\\"); } #region 复制自定义规则文件到底包目录 ShowState("复制自定义规则文件到底包目录..."); var Publish = ryCommon.RyFiles.ReadAllLines(bf_folder + "\\Publish\\Publish.set"); for (int m = 0; m < Publish.Length; m++) { var line = Publish[m].Trim(); if (line == "" || line.IndexOf("#") == 0) { continue; } if (line.IndexOfEx("del:") == 0) { ryCommon.RyFiles.DeleteFile(bf_folder + "\\Publish\\OriginalFiles"+ (PackByLite ? "_Lite" : "") + "\\" + line.Substring(4)); } else if (line.IndexOfEx("copy:") == 0) { var item = line.Substring(5); if(item.StartsWith("lite=>")) { //精简版才生效 if (PackByLite) { item = item.Substring(6); } else { continue; } } if (item.StartsWith("!lite=>")) //非精简版才生效 { if (PackByLite) { continue; } else { item = item.Substring(7); } } if (item.Contains("<") && item.Contains(">")) { DataSet ds_var = db.ReadData("select * from VarInfo"); if (mydb.HaveData(ds_var)) { for (int n = 0; n < ds_var.Tables[0].Rows.Count; n++) { DataRow row_var = ds_var.Tables[0].Rows[n]; item = item.Replace("<" + row_var["VarName"].ToString() + ">", row_var["VarValue"].ToString()); if (!item.Contains("<") || !item.Contains(">")) { break; } } } } var from_to = item.Replace("->", "|").Split('|'); if (from_to.Length == 2) { var from_path = from_to[0]; var to_path = from_to[1]; if(from_path.IndexOfEx(":")<0 && from_path.IndexOfEx("<") < 0) { from_path= ouput_folder + "\\" + from_path; } if (from_path.IndexOfEx("<") >= 0) { continue; } var from_filename = System.IO.Path.GetFileName(from_path); if (from_filename.IndexOfEx("*") >= 0) { var file_list = System.IO.Directory.GetFiles(System.IO.Path.GetDirectoryName(from_path),from_filename); if (file_list != null) { for (int i = 0; i < file_list.Length; i++) { file_op.CopyFileOrFolder(file_list[i], bf_folder + "\\Publish\\OriginalFiles"+ (PackByLite ? "_Lite" : "") + "\\" + to_path); } } var dir_list = System.IO.Directory.GetDirectories(System.IO.Path.GetDirectoryName(from_path), from_filename); if (file_list != null) { for (int i = 0; i < dir_list.Length; i++) { file_op.CopyFileOrFolder(dir_list[i], bf_folder + "\\Publish\\OriginalFiles"+ (PackByLite ? "_Lite" : "") + "\\" + to_path); } } } else { file_op.CopyFileOrFolder(from_path, bf_folder + "\\Publish\\OriginalFiles"+ (PackByLite ? "_Lite" : "") + "\\" + to_path); } } } } #endregion ShowState("正在打包..."); if (System.IO.File.Exists(bf_folder + "\\Publish\\Green\\" + eng_name + ".zip")) { RyFiles.DeleteFile(bf_folder + "\\Publish\\Green\\" + eng_name + ".zip"); } var cmd2 = Read_Prog(WinRARPath, "-r -ep1 a \"" + bf_folder + "\\Publish\\Green\\" + eng_name + ".zip\" \"" + bf_folder + "\\Publish\\OriginalFiles"+ (PackByLite ? "_Lite" : "") + "\\\""); RyFiles.CopyBigFile(bf_folder + "\\Publish\\Green\\" + eng_name + ".zip", bf_folder + "\\Publish\\Green\\HistoryVer\\" + eng_name + "_" + file_ver + ".zip"); ShowState("打包完成..."); if (ftpid > 0) { Application.OpenForms[0].Invoke(new Action(() => { SuperDesign.Manager.FTP.FrmUploadUpdateZipToFtp frm = new SuperDesign.Manager.FTP.FrmUploadUpdateZipToFtp(); frm.LocalPath = bf_folder + "\\Publish\\Green\\" + eng_name + ".zip"; frm.EngName = upload_name; frm.FTPId = ftpid; frm.RemoteDir = ftp_remote_dir; if (frm.ShowDialog() == DialogResult.OK) { ShowState("上传完成..."); } frm.Dispose(); })); } } } } db.Free(); void ShowState(string text) { OnStateChanged?.Invoke(this,text); } } private void File_op_OnCanelCopy(object sender, CancelEventArgs e, string FromPath, string ToPath) { if(RyFiles.GetFileSize(FromPath)==RyFiles.GetFileSize(ToPath)) { var dt1 = RyFiles.GetFileDate(FromPath); var dt2 = RyFiles.GetFileDate(ToPath); if(dt1.LastWriteTime==dt2.LastWriteTime) { e.Cancel = true; } } } } public class VerInfo { public string Title { get; set; } = ""; public string Description { get; set; } = ""; public string Company { get; set; } = ""; public string Product { get; set; } = ""; public string Copyright { get; set; } = ""; public string Version { get; set; } = ""; public string FileVersion { get; set; } = ""; } }