SuperDesign/Source/开发辅助工具/Tools/FrmProject.cs

1205 lines
54 KiB
C#
Raw Normal View History

using Microsoft.Win32;
using Newtonsoft.Json.Linq;
using ryCommon;
using ryCommonDb;
using ryControls.Controls;
using SuperDesign.Manager.FTP;
using SuperDesign.Tools;
using SuperDesign.Tools.UpLog;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Text;
using System.Threading;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Xml;
using WeifenLuo.WinFormsUI.Docking;
using .Manager;
namespace .Tools
{
public partial class FrmProject : DockContent
{
public string ProjectName { get; set; } = "";
public FrmProject(string ProjectPath)
{
_ProjectPath = ProjectPath;
InitializeComponent();
try
{
if (_ProjectPath == "") { return; }
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(_ProjectPath);
var xmlnsm = new XmlNamespaceManager(xml.NameTable);
xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI);
var root = @"d:Project//d:PropertyGroup//d:";
var project_name = GetValue("AssemblyName");
if (project_name != "") { Text = project_name; }
ProjectName = project_name;
#region
var ApplicationIcon = GetValue("ApplicationIcon");
ApplicationIcon = System.IO.Path.GetDirectoryName(_ProjectPath) + "\\" + ApplicationIcon;
if (System.IO.File.Exists(ApplicationIcon))
{
try
{
Icon = new Icon(ApplicationIcon);
}
catch
{
}
}
#endregion
LoadPath();
#region
var DefineConstants = xml.SelectSingleNode(@"d:Project//d:PropertyGroup//d:DefineConstants", xmlnsm);
if (DefineConstants != null)
{
string DefineConstants_Text = ";" + DefineConstants.InnerText + ";";
ChkTestOn.Checked = DefineConstants_Text.IndexOfEx(";TEST;") >= 0;
if (DefineConstants_Text.IndexOfEx(";DY;") < 0 && DefineConstants_Text.IndexOfEx(";PERSONAL;") < 0)
{
RbGeneral.Checked = true;
}
else
{
RbCompany.Checked = DefineConstants_Text.IndexOfEx(";DY;") >= 0;
RbPersonal.Checked = DefineConstants_Text.IndexOfEx(";PERSONAL;") >= 0;
}
}
#endregion
var folder = System.IO.Path.GetDirectoryName(_ProjectPath);
TxtProjectVer.Text= Manager.RyProject.GetVerInfo(folder + "\\Properties\\AssemblyInfo.cs").Version;
string GetValue(string name)
{
var node = xml.SelectSingleNode(root + name, xmlnsm);
if (node != null)
{
return node.InnerText;
}
return "";
}
}
catch { }
OlvUpVer.AspectGetter = delegate (object x) { return ((UpLogItem)x).Version; };
OlvUpdateDate.AspectGetter = delegate (object x) { return ((UpLogItem)x).AddTime.ToDateTime().ToString(); };
}
/// <summary>
/// 获取毕方标准项目根路径
/// </summary>
/// <returns></returns>
private string GetBFFolderPath()
{
var _path = _ProjectPath;
while (true)
{
_path = System.IO.Path.GetDirectoryName(_path.TrimEnd('\\')).TrimEnd('\\');
if (System.IO.File.Exists(_path + "\\查看项目.ryp"))
{
return _path;
}
else
{
if (_path.Length < 4) { break; }
}
}
return "";
}
private void LoadPath()
{
var _path = GetBFFolderPath();
if (_path!="")
{
var folder = _path;
Ini ini = new Ini(folder + "\\查看项目.ryp");
TxtName.Text = ini.ReadIni("project", "name");
TxtEngName.Text = ini.ReadIni("project", "engname");
Txtusqver.Text = ini.ReadIni("project", "usqver");
Txtproglang.Text = ini.ReadIni("project", "proglang");
ChkConfuse.Checked = ini.ReadIni("project", "confuse", false);
TxtUploadName.Text = ini.ReadIni("project", "UploadName");
AddPath(true,"Debug输出目录", "Bin\\Debug","包含调试信息的输出目录");
AddPath(true, "Release输出目录", "Bin\\Release", "不包含调试信息的输出目录");
AddPath(true,"源代码目录", "Source", "含有项目源码");
AddPath(true, "安装包目录", "Publish", "对外发布的安装文件");
AddPath(false, " - 免安装输出包目录", "Publish\\Green", "绿色免安装版本目录通常为zip压缩包");
AddPath(false, " - 安装输出包目录", "Publish\\Install", "需要安装的版本目录通常为exe压缩包");
AddPath(false, " - 输出底包目录", "Publish\\OriginalFiles", "输出底包,保留完整的文件结构,绿色版、安装包都以此来制作");
AddPath(false, " - 升级输出包目录", "Publish\\UpdateFile", "升级包目录通常为zip压缩包,非完整输出包");
AddPath(true, "帮助文件目录", "Help", "帮助文档");
AddPath(true, "外部资源目录", "Res", "项目用到的资源备份,例外图标、图片、第三方项目");
AddPath(false, " - 第三方组件项目", "Res\\ThirdParty", "包含第三方组件的项目");
AddPath(false, " - 图片文件夹", "Res\\Images", "含下载的项目图片");
AddPath(true, "更新日志", "更新日志.txt", "当前项目更新日志文件");
AddPath(true, "更新日志", "更新日志.md", "当前项目更新日志文件");
AddPath(true, "更新日志", "CHANGELOG.md", "当前项目更新日志文件");
AddPath(true, "自述文件", "README.md", "当前项目自述文件");
void AddPath(bool bold,string name,string path,string des)
{
if (System.IO.File.Exists(folder + "\\" + path) || System.IO.Directory.Exists(folder + "\\" + path))
{
XPTable.Models.Row itemList = new XPTable.Models.Row
{
Tag = folder + "\\" + path
};
var cell_name = new XPTable.Models.Cell(name);
if(bold)
cell_name.ForeColor=Color.Blue;
else
{ cell_name.ForeColor = Color.Tomato; }
itemList.Cells.Add(cell_name);
itemList.Cells.Add(new XPTable.Models.Cell(path));
var cell = new XPTable.Models.Cell(des);
cell.ForeColor = Color.Gray;
itemList.Cells.Add(cell);
table1.TableModel.Rows.Add(itemList);
}
}
}
}
string _ProjectPath = "";
private string GetPath(string _path)
{
var cur_dir = Environment.CurrentDirectory;
Environment.CurrentDirectory = System.IO.Path.GetDirectoryName(_ProjectPath);
var tmp_path = System.IO.Path.GetFullPath(_path);
Environment.CurrentDirectory = cur_dir;
return tmp_path;
}
private string GetDebugPath()
{
if (_ProjectPath.Length==0) { return ""; }
if (!System.IO.File.Exists(_ProjectPath)) { return ""; }
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(_ProjectPath);
var xmlnsm = new XmlNamespaceManager(xml.NameTable);
xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI);
var node = xml.SelectSingleNode(@"d:Project//d:PropertyGroup//d:OutputPath", xmlnsm);
if (node != null)
{
string path = node.InnerText;
path = GetPath(path);
return path;
}
return "";
}
private void BtnCopyCMD_Click(object sender, EventArgs e)
{
ryCommon.RyFiles.CopyToClip("\"" + Application.ExecutablePath + "\" ver \"$(ProjectDir)\"");
if (_ProjectPath == "") { MessageBox.Show("当前项目无效,无法设置", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; }
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(_ProjectPath);
var xmlnsm = new XmlNamespaceManager(xml.NameTable);
xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI);
var node = xml.SelectSingleNode(@"d:Project//d:PropertyGroup//d:PreBuildEvent", xmlnsm);
if (node != null)
{
if (node.InnerText == "")
{
node.InnerText = "\"" + Application.ExecutablePath + "\" ver \"$(ProjectDir)\"";
xml.Save(_ProjectPath);
}
else
{
MessageBox.Show("当前项目已经存在生成动作,为防止误删,请手工操作。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
}
else
{
XmlElement ww = xml.CreateElement("PropertyGroup", xml.DocumentElement.NamespaceURI);
XmlElement ww2 = xml.CreateElement("PreBuildEvent", xml.DocumentElement.NamespaceURI);
//ww.("xmlns");
ww2.InnerText = "\"" + Application.ExecutablePath + "\" ver \"$(ProjectDir)\"";
xml.DocumentElement.AppendChild(ww);
ww.AppendChild(ww2);
xml.Save(_ProjectPath);
}
MessageBox.Show("写入成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void CloseApp()
{
Itrycn_Db.IsCloseConfirm = false;
this.DockPanel.FindForm().Close();
}
private void BtnOpenOutput_Click(object sender, EventArgs e)
{
var debug_path = GetDebugPath();
if (System.IO.Directory.Exists(debug_path))
{
ryCommon.RyFiles.OpenFile(debug_path);
CloseApp();
}
else
{
MessageBox.Show("打开输出目录失败。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/// <summary>
/// 获取Notepad++路径
/// </summary>
/// <returns></returns>
private string GetNotepadPlusPath()
{
var path = "";
try
{
RegistryKey LMach = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
RegistryKey softwareRun = LMach.OpenSubKey(@"SOFTWARE\Notepad++", true);
if (softwareRun.GetValue("") != null)
{
string notepad_plus_path = softwareRun.GetValue("").ToString() + "\\notepad++.exe";
if (System.IO.File.Exists(notepad_plus_path))
{
path = notepad_plus_path;
}
}
softwareRun.Close();
LMach.Close();
}
catch
{
}
return path;
}
private void BtnMessageBox_Click(object sender, EventArgs e)
{
ryCommon.RyFiles.CopyToClip("MessageBox.Show(\"这是一个测试\",\"提示\",MessageBoxButtons.OK,MessageBoxIcon.Information);");
CloseApp();
}
private void BtnCustomMessageBox_Click(object sender, EventArgs e)
{
FrmMessageBox frm = new FrmMessageBox
{
Icon = Icon
};
if (frm.ShowDialog() == DialogResult.OK)
{
CloseApp();
}
}
public List<string> GetAllProjectFiles()
{
var result = new List<string>();
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
var files = System.IO.Directory.GetFiles(_path+ "\\Source","*.sln");
var sln_path = "";
if(files==null || files.Length==0)
{
var dirs = System.IO.Directory.GetDirectories(_path + "\\Source");
if(dirs!=null)
{
for (int i = 0; i < dirs.Length; i++)
{
files = System.IO.Directory.GetFiles(dirs[i], "*.sln");
if(files!=null && files.Length>0)
{
sln_path = files[0];
break;
}
}
}
}
else
{
sln_path = files[0];
}
if(sln_path.Length>0)
{
var lines = RyFiles.ReadAllLines(sln_path);
if(lines!=null)
{
for (int i = 0; i < lines.Length; i++)
{
if (lines[i].StartsWith("Project("))
{
var project_path = lines[i].GetStr(",", ",").Trim().Trim('"');
if(project_path.Length>0)
{
project_path = System.IO.Path.GetDirectoryName(sln_path).TrimEnd('\\') + "\\" + project_path;
if(System.IO.File.Exists(project_path))
{
result.Add(project_path);
}
}
}
}
}
}
}
return result;
}
private void FrmProject_Load(object sender, EventArgs e)
{
var k=QuickMsg.RyMemoryShare.WriteToMemory(this.Handle.ToInt32(),"SuperDesign" + rySafe.MD5Sha1.GetMD5(_ProjectPath));
var _path = GetBFFolderPath();
if (_path.Length>0)
{
IDbInterface db = new SQLiteDataProvider();
if (db.ConnDb(_path+ "\\Res\\Setting\\UpdateLogs.dat") == 1)
{
RyQuickSQL mySQL = new RyQuickSQL("UpdateLogs");
mySQL.AddField("VerStr", "");
mySQL.AddField("LogText", "");
mySQL.AddField("LogJson", "");
mySQL.AddField("editTime", DateTime.Now.ToInt64());
mySQL.AddField("addTime", DateTime.Now.ToInt64());
db.CreateDb(mySQL);
#region
mySQL.Clear();
mySQL.TableName = "ProjectNowLogs";
mySQL.AddField("Name", "");
mySQL.AddField("ChsName", "");//值
mySQL.AddField("Value", "");//值
mySQL.AddField("editTime", DateTime.Now.ToInt64());
mySQL.AddField("addTime", DateTime.Now.ToInt64());
if (db.CreateDb(mySQL) == 1)
{
db.ExecuteNonQuery("CREATE INDEX index_Name ON ProjectNowLogs(Name); ");
}
#endregion
#region
mySQL.Clear();
mySQL.TableName = "Settings";
mySQL.AddField("Name", "");
mySQL.AddField("Value", "");//值
mySQL.AddField("addTime", DateTime.Now);
if (db.CreateDb(mySQL) == 1)
{
db.ExecuteNonQuery("CREATE INDEX index_Name ON Settings(Name); ");
}
#endregion
var ds_logs = db.ReadData("select * from UpdateLogs order by addTime desc");
if(ds_logs.HaveData())
{
List<UpLogItem> list = new List<UpLogItem>();
for (int i = 0; i < ds_logs.RowCount(); i++)
{
var row = ds_logs.GetRow(i);
list.Add(new UpLogItem() {
Version = row["VerStr"].ToString(),
LogJson = row["LogJson"].ToString(),
LogText = row["LogText"].ToString(),
AddTime = row["addTime"].ToInt64(),
});
}
LvUpdateLogList.AddObjects(list);
OlvUpVer.Text = "版本(" + list.Count + ")";
tabPage4.Text = "更新日志("+ list.Count + ")";
}
ds_logs?.Dispose();
var all_project_path= GetAllProjectFiles();
for (int i = 0; i < all_project_path.Count; i++)
{
var p_name = "";
try
{
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(all_project_path[i]);
var xmlnsm = new XmlNamespaceManager(xml.NameTable);
xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI);
var root = @"d:Project//d:PropertyGroup//d:";
p_name = GetValue("AssemblyName");
if(p_name.Length==0)
{
p_name = System.IO.Path.GetFileNameWithoutExtension(all_project_path[i]);
}
string GetValue(string name)
{
var node = xml.SelectSingleNode(root + name, xmlnsm);
if (node != null)
{
return node.InnerText;
}
return "";
}
}
catch { }
if (p_name.Length == 0) { continue; }
ProjectLogItem projectLogItem = new ProjectLogItem
{
ProjectName = p_name,
ProjectPath = all_project_path[i],
VersionPath= System.IO.Path.GetDirectoryName(all_project_path[i]) + "\\Properties\\AssemblyInfo.cs",
};
if(!System.IO.File.Exists(projectLogItem.VersionPath))
{
projectLogItem.VersionPath = all_project_path[i];
}
TabPage tab = new TabPage()
{
Text = p_name,
Tag= projectLogItem
};
Label label_title = new Label
{
Parent = tab,
Location = new Point(1, 10),
AutoSize = true,
Tag = "title",
Text = "中文名:"
};
ryControls.TextBoxEx2 txt_title = new ryControls.TextBoxEx2
{
Parent = tab,
Location = new Point(label_title.Left+ label_title.Width+1, 4),
Width = 200,
Height= 25,
Tag = "",
Text = ""
};
Label label = new Label
{
Parent = tab,
Location = new Point(txt_title.Left+ txt_title.Width+2, 10),
AutoSize=true,
Tag="version",
Text = "版本号:" + projectLogItem.Version
};
RichTextBox2 rich = new RichTextBox2
{
Parent = tab,
Dock = DockStyle.Fill,
Font=new Font("微软雅黑",11),
Location = new Point(label_title.Left, label_title.Top + label_title.Height+10),
Size = new Size(tab.ClientSize.Width,tab.ClientSize.Height-(label_title.Top + label_title.Height+8)),
Anchor= AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom
};
var ds_now_up = db.ReadData("select * from ProjectNowLogs where Name='" + p_name + "'");
if (ds_now_up.HaveData())
{
txt_title.Text = ds_now_up.GetRow(0)["ChsName"].ToString();
rich.Text = ds_now_up.GetRow(0)["Value"].ToString();
}
ds_now_up?.Dispose();
tabControl1.TabPages.Add(tab);
}
}
db.Free();
}
}
class ProjectLogItem
{
public string ProjectName { get; set; } = "";
public string ProjectPath { get; set; } = "";
public string Version
{
get
{
return RyProject.GetVerInfo(VersionPath).Version;
}
}
/// <summary>
///更新版本号
/// </summary>
public void UpdateVer()
{
Manager.RyProject.UpdateVer(VersionPath);
}
public string VersionPath { get; set; } = "";
}
private void table1_DoubleClick(object sender, EventArgs e)
{
if (table1.SelectedItems.Length == 0) { return; }
var path = table1.SelectedItems[0].Tag.ToString();
if (System.IO.Directory.Exists(path))
{
ryCommon.RyFiles.OpenFile(path);
}
else if (System.IO.File.Exists(path))
{
if (System.IO.Path.GetExtension(path).ToLower() == ".txt")
{
string notepad_plus_path = GetNotepadPlusPath();
if (System.IO.File.Exists(notepad_plus_path))
{
ryCommon.RyFiles.RunFile(notepad_plus_path, "\"" + path + "\"");
}
else
{
ryCommon.RyFiles.OpenFile(path);
}
}
else if (System.IO.Path.GetExtension(path).ToLower() == ".md")
{
ryCommon.RyFiles.OpenFile(path);
}
else
{
ryCommon.RyFiles.OpenFolderGotoFile(path);
}
}
}
private void BtnClean_Click(object sender, EventArgs e)
{
switch (MessageBox.Show("是否要进行清理不必要的文件,例如*.pdb", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information))
{
case DialogResult.No:
return;
}
var debug_path = GetDebugPath();
if (System.IO.Directory.Exists(debug_path))
{
Itrycn_Db.DeleteFiles(debug_path, "*.pdb");
Itrycn_Db.DeleteFiles(debug_path, "*.dcu");
}
var folder = GetBFFolderPath();
if(folder!="")
{
if(System.IO.Directory.Exists(folder + "\\Bin\\Release"))
{
Itrycn_Db.DeleteFiles(folder + "\\Bin\\Release", "*.pdb");
Itrycn_Db.DeleteFiles(folder + "\\Bin\\Release", "*.dcu");
}
}
MessageBox.Show("清理完成。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
/// <summary>
/// 等待进程执行完毕
/// </summary>
/// <param name="cmd_text"></param>
/// <returns></returns>
public static 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;
}
private void BtnBatchZip_Click(object sender, EventArgs e)
{
BtnBatchZip.Enabled = false;
bool PackByLite = ChkPackByLite.Checked;
Thread th = new Thread(Start);
th.Start();
void Start()
{
RyProject project = new RyProject();
project.OnStateChanged += Project_OnStateChanged;
project.Pack(GetBFFolderPath(), PackByLite);
this.Invoke(new Action(() =>
{
BtnBatchZip.Enabled = true;
}));
}
}
private void Project_OnStateChanged(object sender, string e)
{
this.Invoke(new Action(() =>
{
LblState.Text = "状态:" + e;
}));
}
private void GetVersBySln(string path)
{
var _bf_path = GetBFFolderPath();
RyProject project = new RyProject();
string update_logs_text = "";
if (System.IO.File.Exists(path))
{
ryCommon.Ini ini = new Ini(_bf_path + "\\查看项目.ryp");
var sln_text = ryCommon.RyFiles.ReadAllLines(path);
for (int i = 0; i < sln_text.Length; i++)
{
if(sln_text[i].StartsWith("Project"))
{
var item = sln_text[i].Replace(" = ",",").Split(',');
if (item.Length>=3)
{
var project_name = item[1].Trim().Trim('"');
var project_path =System.IO.Path.GetDirectoryName(path).TrimEnd('\\')+"\\"+item[2].Trim().Trim('"');
var ver = project.GetAssemblyVersion(project_path);
if (ver != "")
{
if(ini.ReadIni("NoVerMD", project_name,0) == 1) { continue; }
if (update_logs_text != "") { update_logs_text += "\r\n"; }
update_logs_text +="#### "+ project_name + " V" + ver+ "\r\n暂无\r\n";
}
}
}
}
}
if (update_logs_text != "")
{
if (_bf_path != "")
{
var update_text = ryCommon.RyFiles.ReadAllText(_bf_path + "\\CHANGELOG.md");
RyFiles.WriteAllText(_bf_path+ "\\CHANGELOG.md", "### " + DateTime.Now.ToString("yyyy-MM-dd") + "更新\r\n------\r\n"+ update_logs_text + update_text, Encoding.UTF8);
RyFiles.OpenFile(_bf_path + "\\CHANGELOG.md");
}
}
}
private void BtnInsertUpdate_Click(object sender, EventArgs e)
{
var _path = GetBFFolderPath();
if (_path.Length>0)
{
var files = System.IO.Directory.GetFiles(_path+"\\Source");
for (int i = 0; i < files.Length; i++)
{
var ext = System.IO.Path.GetExtension(files[i]).ToLower();
if(ext==".sln")
{
GetVersBySln(files[i]);
return;
}
}
var dirs = System.IO.Directory.GetDirectories(_path + "\\Source");
for (int i = 0; i < dirs.Length; i++)
{
var files2 = System.IO.Directory.GetFiles(dirs[i]);
for (int m = 0; m < files2.Length; m++)
{
var ext = System.IO.Path.GetExtension(files2[m]).ToLower();
if (ext == ".sln")
{
GetVersBySln(files2[m]);
return;
}
}
}
//var sln_path = _path + "\\更新日志.md";
}
}
private void BtnUpdateDll_Click(object sender, EventArgs e)
{
BtnUpdateDll.Enabled = false;
var debug_path = GetDebugPath();
int error = 0;
var _error_str = "";
if (System.IO.Directory.Exists(debug_path))
{
RyProject project = new RyProject
{
CopyDllToBin = true,
ChangedOutputPath = false
};
var bf_folder = GetBFFolderPath();
if(bf_folder!="")
{
error+= project.UpdateCSproj(bf_folder+"\\Source");
}
else
{
project.SetCSproj(_ProjectPath, "");
}
error +=project.UpdateDlls(debug_path,out _error_str);
}
BtnUpdateDll.Enabled = true;
if (error == 0)
{
MessageBox.Show("更新dll完成。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("更新dll完成,共失败"+error+"项。\r\n\r\n"+ _error_str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void BtnUpdateVer_Click(object sender, EventArgs e)
{
var folder = System.IO.Path.GetDirectoryName(_ProjectPath);
Manager.RyProject.UpdateVer(folder + "\\Properties\\AssemblyInfo.cs");
CloseApp();
}
private void BtnUpdateDllVer_Click(object sender, EventArgs e)
{
BtnUpdateDllVer.Enabled = false;
int error = 0;
RyProject project = new RyProject
{
CopyDllToBin = true,
ChangedOutputPath = false
};
var bf_folder = GetBFFolderPath();
var _error_str = "";
if (bf_folder != "")
{
error += project.UpdateDlls(bf_folder + "\\Bin",out _error_str);
}
var debug_path = GetDebugPath();
if(debug_path.IndexOfEx(bf_folder + "\\Bin")<0)
{
error += project.UpdateDlls(debug_path, out _error_str);
}
BtnUpdateDllVer.Enabled = true;
if (error == 0)
{
MessageBox.Show("更新dll完成。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("更新dll完成,共失败" + error + "项。\r\n\r\n"+ _error_str, "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
private void BtnRepairFolder_Click(object sender, EventArgs e)
{
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
if (!System.IO.File.Exists(_path + "\\CHANGELOG.md"))
{
BtnInsertUpdate.PerformClick();
}
ryCommon.Ini ini = new Ini(_path + "\\查看项目.ryp");
FrmCreateProject frm = new FrmCreateProject();
frm.TxtFolder.Text = _path;
frm.ChkUnCreateProject.Checked = true;
frm.TxtProjectEngName.Text = ini.ReadIni("project", "engname");
frm.TxtProjectName.Text = ini.ReadIni("project", "name");
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog();
}
}
private void BtnSave_Click(object sender, EventArgs e)
{
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
var folder = _path;
Ini ini = new Ini(folder + "\\查看项目.ryp");
ini.WriteIni("project", "name", TxtName.Text);
ini.WriteIni("project", "engname", TxtEngName.Text);
ini.WriteIni("project", "usqver", Txtusqver.Text);
ini.WriteIni("project", "proglang", Txtproglang.Text);
ini.WriteIni("project", "confuse", ChkConfuse.Checked);
ini.WriteIni("project", "UploadName", TxtUploadName.Text);
MessageBox.Show("保存成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void BtnSave2_Click(object sender, EventArgs e)
{
System.Xml.XmlDocument xml = new System.Xml.XmlDocument();
xml.Load(_ProjectPath);
var xmlnsm = new XmlNamespaceManager(xml.NameTable);
xmlnsm.AddNamespace("d", xml.DocumentElement.NamespaceURI);
#region
var DefineConstants = xml.SelectSingleNode(@"d:Project//d:PropertyGroup//d:DefineConstants", xmlnsm);
if (DefineConstants != null)
{
string DefineConstants_Text = ";" + DefineConstants.InnerText + ";";
if(ChkTestOn.Checked)
{
if(DefineConstants_Text.IndexOfEx(";TEST;") < 0) { DefineConstants_Text += "TEST;"; }
}
else
{
if (DefineConstants_Text.IndexOfEx(";TEST;")>=0) { DefineConstants_Text = DefineConstants_Text.Replace(";TEST;",";"); }
}
if(RbCompany.Checked)
{
if (DefineConstants_Text.IndexOfEx(";DY;") < 0) { DefineConstants_Text += "DY;"; }
if (DefineConstants_Text.IndexOfEx(";PERSONAL;") >= 0) { DefineConstants_Text = DefineConstants_Text.Replace(";PERSONAL;", ";"); }
}
else if (RbPersonal.Checked)
{
if (DefineConstants_Text.IndexOfEx(";PERSONAL;") < 0) { DefineConstants_Text += "PERSONAL;"; }
if (DefineConstants_Text.IndexOfEx(";DY;") >= 0) { DefineConstants_Text = DefineConstants_Text.Replace(";DY;", ";"); }
}
else
{
if (DefineConstants_Text.IndexOfEx(";DY;") >= 0) { DefineConstants_Text = DefineConstants_Text.Replace(";DY;", ";"); }
if (DefineConstants_Text.IndexOfEx(";PERSONAL;") >= 0) { DefineConstants_Text = DefineConstants_Text.Replace(";PERSONAL;", ";"); }
}
DefineConstants.InnerText = DefineConstants_Text.Trim(';');
xml.Save(_ProjectPath);
MessageBox.Show("保存成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show("保存出错,找不到相关信息。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
#endregion
}
private void BtnUploadProject_Click(object sender, EventArgs e)
{
List<UploadInfo> list = new List<UploadInfo>();
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
string ftp_setting_path = _path + "\\FTPUploadData.jryp";
if(System.IO.File.Exists(ftp_setting_path))
{
ryCommon.Ini ini = new ryCommon.Ini(_path + "\\查看项目.ryp");
var eng_name = ini.ReadIni("project", "engname");
var com_mode = "Debug";
var ouput_folder = _path + "\\Bin\\" + com_mode + "\\" + eng_name;
if (!System.IO.Directory.Exists(ouput_folder))
{
ouput_folder = _path + "\\Bin\\" + com_mode;
}
IDbInterface db = Itrycn_Db.CreateDataProvider(Itrycn_Db.dataType);
if (db.ConnDb(Itrycn_Db.User_SQLConn) == 1)
{
var lines = RyFiles.ReadAllLines(ftp_setting_path);
if (lines != null && lines.Length > 0)
{
for (int i = 0; i < lines.Length; i++)
{
var line = lines[i].Split('=');
if (line.Length < 2) { continue; }
var item = line[0];
if (item.Contains("<") && item.Contains(">"))
{
DataSet ds_var = db.ReadData("select * from VarInfo");
if (ds_var.HaveData())
{
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;
}
}
}
}
if (item.IndexOfEx(":") < 0 && item.IndexOfEx("<") < 0)
{
item = ouput_folder + "\\" + item;
}
if(System.IO.File.Exists(item))
list.Add(new UploadInfo() { FromPath = item, ToPath = line[1] });
}
}
}
db.Free();
}
}
if(list.Count>0)
{
FrmUploadFilesToFtp frm= new FrmUploadFilesToFtp();
frm.UploadInfos.AddRange(list);
if(frm.ShowDialog()==DialogResult.OK)
{
}
frm.Dispose();
}
}
private bool SaveUpdateLog(bool clean=false)
{
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
IDbInterface db = new SQLiteDataProvider();
if (db.ConnDb(_path + "\\Res\\Setting\\UpdateLogs.dat") == 1)
{
if (clean)
{
db.ExecuteNonQuery("update ProjectNowLogs set Value='',editTime="+DateTime.Now.ToInt64());
for (int i = 0; i < tabControl1.TabPages.Count; i++)
{
var tab = tabControl1.TabPages[i];
for (int c = 0; c < tab.Controls.Count; c++)
{
var ctl = tab.Controls[c];
if (tab.Tag is ProjectLogItem p_item)
{
if (ctl is RichTextBox2 rich)
{
rich.Text = "";
}
}
}
}
}
else
{
#region
for (int i = 0; i < tabControl1.TabPages.Count; i++)
{
var tab = tabControl1.TabPages[i];
RichTextBox2 rich = null;
ryControls.TextBoxEx2 txt = null;
if (tab.Tag is ProjectLogItem p_item)
{
for (int c = 0; c < tab.Controls.Count; c++)
{
var ctl = tab.Controls[c];
if (ctl is RichTextBox2 rich1)
{
rich = rich1;
}
else if (ctl is ryControls.TextBoxEx2 txt1)
{
txt = txt1;
}
}
if (rich != null && txt != null)
{
RyQuickSQL mySQL = new RyQuickSQL("ProjectNowLogs");
mySQL.AddField("Name", p_item.ProjectName);
mySQL.AddField("ChsName", txt.Text);
mySQL.AddField("Value", rich.Text);//值
mySQL.AddField("editTime", DateTime.Now.ToInt64());
if (db.Update(mySQL, "Name=@Name") == 0)
{
mySQL.AddField("addTime", DateTime.Now.ToInt64());
db.Insert(mySQL);
}
}
}
}
db.Free();
return true;
#endregion
}
}
db.Free();
}
return false;
}
private void BtnSaveLog_Click(object sender, EventArgs e)
{
if (SaveUpdateLog())
{
MessageBox.Show("保存成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
protected override void WndProc(ref System.Windows.Forms.Message msg)
{
switch (msg.Msg)
{
case 17189: //处理消息
{
#region
switch (msg.WParam.ToInt32())
{
case 100://
var forms = Application.OpenForms;
for (int i = 0; i < forms.Count; i++)
{
if (forms[i] is Form1 form)
{
var topmost = form.TopMost;
form.TopMost = true;
form.BringToFront();
RyForm.BringToTop(form.Handle);
RyForm.ShowCenter(form,null);
form.Show();
form.TopMost = topmost;
}
}
break;
}
#endregion
}
break;
default:
base.WndProc(ref msg);//调用基类函数处理非自定义消息。
break;
}
}
private void FrmProject_FormClosing(object sender, FormClosingEventArgs e)
{
SaveUpdateLog();
QuickMsg.RyMemoryShare.DelMemory("SuperDesign" + rySafe.MD5Sha1.GetMD5(_ProjectPath));
}
private void BtnPublishLogs_Click(object sender, EventArgs e)
{
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
IDbInterface db = new SQLiteDataProvider();
if (db.ConnDb(_path + "\\Res\\Setting\\UpdateLogs.dat") == 1)
{
Ini ini = new Ini(_path+ "\\查看项目.ryp");
var Main_Project = ini.ReadIni("project", "MainProject", "");
var Main_Version = "";
ProjectLogItem first_tag = null;
JArray jarr = new JArray();
var index = 0;
for (int i = 0; i < tabControl1.TabPages.Count; i++)
{
var tab = tabControl1.TabPages[i];
RichTextBox2 rich = null;
ryControls.TextBoxEx2 txt = null;
if (tab.Tag is ProjectLogItem p_item)
{
for (int c = 0; c < tab.Controls.Count; c++)
{
var ctl = tab.Controls[c];
if (ctl is RichTextBox2 rich1)
{
if (rich1.Text.Length == 0) { continue; }
rich = rich1;
}
else if(ctl is ryControls.TextBoxEx2 txt1)
{
txt = txt1;
}
}
if(rich!=null && txt!=null)
{
p_item.UpdateVer();
var Version = p_item.Version;
if (Main_Project.Length == 0)
{
if (index == 0)
{
Main_Version = Version;
}
}
else
{
if (Main_Project == p_item.ProjectName)
{
Main_Version = Version;
}
}
if (index == 0) { first_tag = p_item; }
JObject jo_item = new JObject
{
{ "ProjectName", p_item.ProjectName },
{ "ProjectChsName", txt.Text },
{ "VerStr", Version },
{ "LogText",rich.Text }
};
if (Main_Version.Length > 0)
{
jarr.Insert(0, jo_item);
}
else
{
jarr.Add(jo_item);
}
index++;
}
}
}
for (int i = 0; i < tabControl1.TabPages.Count; i++)
{
var tab = tabControl1.TabPages[i];
if (tab.Tag is ProjectLogItem p_item)
{
for (int c = 0; c < tab.Controls.Count; c++)
{
var ctl = tab.Controls[c];
if (ctl is Label label && label.Tag!=null && label.Tag.ToString()=="version")
{
label.Text = "版本号:" + p_item.Version;
}
}
}
}
if (Main_Version.Length==0 && first_tag!=null)
{
Main_Version = first_tag.Version;
}
#region
var log_text = SuperDesign.Manager.APIManager.GetMdLogText(jarr, DateTime.Now);
var CHANGELOG = RyFiles.ReadAllText(_path+ "\\CHANGELOG.md").Trim();
CHANGELOG = log_text + "\r\n\r\n" + CHANGELOG;
RyFiles.WriteAllText(_path + "\\CHANGELOG.md", CHANGELOG);
RyQuickSQL mySQL = new RyQuickSQL("UpdateLogs");
var folder = System.IO.Path.GetDirectoryName(_ProjectPath);
mySQL.AddField("VerStr", Main_Version);
mySQL.AddField("LogText", log_text);
mySQL.AddField("LogJson", jarr.ToString());
mySQL.AddField("editTime", DateTime.Now.ToInt64());
if (db.Update(mySQL, "VerStr=@VerStr") == 0)
{
mySQL.AddField("addTime", DateTime.Now.ToInt64());
db.Insert(mySQL);
}
SaveUpdateLog(true);
LvUpdateLogList.ClearObjects();
var ds_logs = db.ReadData("select * from UpdateLogs order by addTime desc");
if (ds_logs.HaveData())
{
List<UpLogItem> list = new List<UpLogItem>();
for (int i = 0; i < ds_logs.RowCount(); i++)
{
var row = ds_logs.GetRow(i);
list.Add(new UpLogItem()
{
Version = row["VerStr"].ToString(),
LogText = row["LogText"].ToString(),
LogJson = row["LogJson"].ToString(),
AddTime = row["addTime"].ToInt64(),
});
}
LvUpdateLogList.AddObjects(list);
OlvUpVer.Text = "版本(" + list.Count + ")";
tabPage4.Text = "更新日志(" + list.Count + ")";
}
else
{
OlvUpVer.Text = "版本";
tabPage4.Text = "更新日志";
}
ds_logs?.Dispose();
MessageBox.Show("发布成功。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
FrmPublishLogs frm = new FrmPublishLogs();
frm.Icon = Icon;
frm.ShowLog(jarr.ToString());
frm.ShowDialog();
frm.Dispose();
#endregion
}
db.Free();
}
}
private void FrmProject_Deactivate(object sender, EventArgs e)
{
SaveUpdateLog();
}
private void LvUpdateLogList_DoubleClick(object sender, EventArgs e)
{
if (LvUpdateLogList.SelectedObject == null) { return; }
var item=(UpLogItem)LvUpdateLogList.SelectedObject;
FrmUpdateLog frm = new FrmUpdateLog();
frm.Icon = Icon;
frm.Text = "更新日志=>更新时间:" + item.AddTime.ToDateTime();
frm.ShowLog(item.LogJson);
if (frm.ShowDialog()==DialogResult.OK)
{
}
frm.Dispose();
}
}
class UpLogItem
{
public string Version { get; set; } = "";
public string LogText { get; set; } = "";
public string LogJson { get; set; } = "";
public long AddTime { get; set; } = 0;
}
}