### 2024-12-21 星期六更新

------
#### SuperDesign    V3.0.2412.2101
- *.[新增]新增支持多选更新日志列表,合并生成Html日志。
- *.[改进]支持设置解决方案中的哪些项目日志不显示在Html日志列表里。
- *.[改进]打开时默认选中主项目的更新日志Tab。
- *.[修复]修复创建项目时的版权日期不会随着当前日期更新的BUG。
- *.[修复]修复创建项目时引用的RaUI项目文件无法转换成RaUI.dll的BUG。
- *.[修复]修复连续快速打开项目,会导致软件多开的BUG。
This commit is contained in:
紫林软件 2024-12-21 14:16:03 +08:00
parent a0cbe0a68f
commit 1501abd07f
15 changed files with 391 additions and 172 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ Res/
**/dcu **/dcu
*.dcu *.dcu
/Source/.vs /Source/.vs
/Bin/Debug/SuperDesign/UserDb/Win.dat

View File

@ -5,3 +5,4 @@ Res/
**/dcu **/dcu
*.dcu *.dcu
**/Secure **/Secure
*/.vs

View File

@ -1,4 +1,14 @@
### 2024-12-20 星期五更新 ### 2024-12-21 星期六更新
------
#### SuperDesign V3.0.2412.2101
- *.[新增]新增支持多选更新日志列表,合并生成Html日志。
- *.[改进]支持设置解决方案中的哪些项目日志不显示在Html日志列表里。
- *.[改进]打开时默认选中主项目的更新日志Tab。
- *.[修复]修复创建项目时的版权日期不会随着当前日期更新的BUG。
- *.[修复]修复创建项目时引用的RaUI项目文件无法转换成RaUI.dll的BUG。
- *.[修复]修复连续快速打开项目,会导致软件多开的BUG。
### 2024-12-20 星期五更新
------ ------
#### SuperDesign V3.0.2412.2003 #### SuperDesign V3.0.2412.2003
- *.[新增]新增支持更新日志发布时自动调用起TortoiseGit。 - *.[新增]新增支持更新日志发布时自动调用起TortoiseGit。

View File

@ -41,20 +41,26 @@ namespace SuperDesign.Manager
} }
return log_text; return log_text;
} }
public static string GetHtmlLogText(JArray jarr, DateTime dt) public static string GetHtmlLogText(string bf_folder, JArray jarr, DateTime dt)
{ {
ryCommon.Ini ini = new Ini(bf_folder + "\\查看项目.ryp");
string log_text = ""; string log_text = "";
for (int i = 0; i < jarr.Count; i++) for (int i = 0; i < jarr.Count; i++)
{ {
var item = jarr[i]; var item = jarr[i];
if(log_text.Length!=0) var eng_name= item.GetJsonValue("ProjectName", "");
if(ini.ReadIni("NoVerHtml", eng_name,0)==1)
{
continue;
}
if (log_text.Length != 0)
{ {
log_text += "\r\n"; log_text += "\r\n";
} }
var ProjectName = item.GetJsonValue("ProjectChsName", ""); var ProjectName = item.GetJsonValue("ProjectChsName", "");
if(ProjectName.Length==0) if(ProjectName.Length==0)
{ {
ProjectName = item.GetJsonValue("ProjectName", ""); ProjectName = eng_name;
} }
log_text += "<h4>" + System.Web.HttpUtility.HtmlEncode(ProjectName) + "</h4>"; log_text += "<h4>" + System.Web.HttpUtility.HtmlEncode(ProjectName) + "</h4>";
var logs = item.GetJsonValue("LogText", "").Replace("\r", "\n").Replace("\n\n", "\n").Split('\n'); var logs = item.GetJsonValue("LogText", "").Replace("\r", "\n").Replace("\n\n", "\n").Split('\n');

View File

@ -1,4 +1,5 @@
using System; using ryCommon;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -23,17 +24,25 @@ namespace 开发辅助工具
else if (args[0] == "get") else if (args[0] == "get")
{ {
string ProjectPath = args[1]; string ProjectPath = args[1];
run = new System.Threading.Mutex(true, "SuperDesign_"+rySafe.MD5Sha1.GetMD5(ProjectPath), out bool runone); run = new System.Threading.Mutex(true, "S_"+rySafe.MD5Sha1.GetMD5(ProjectPath), out bool runone);
if (!runone) //已经运行了 if (!runone) //已经运行了
{ {
var handle = QuickMsg.RyMemoryShare.ReadFromMemory("SuperDesign" + rySafe.MD5Sha1.GetMD5(ProjectPath), 0); Ini ini = new Ini(Application.StartupPath + "\\UserDb\\Win.dat");
var handle = ini.ReadIni("ProjectHwnd", rySafe.MD5Sha1.GetMD5(ProjectPath),0); ;
if(handle>0) if(handle>0)
{ {
ryControls.Win32.SendMessage((IntPtr)handle, 17189, 100, 100); if (RyForm.GetWinText((IntPtr)handle).Length > 0)
{
ryControls.Win32.SendMessage((IntPtr)handle, 17189, 100, 100);
}
else
{
Application.Run(new Form1(ProjectPath, "get"));
}
} }
else else
{ {
Application.Run(new Form1(ProjectPath, "get")); // Application.Run(new Form1(ProjectPath, "get"));
} }
} }
else else

View File

@ -291,7 +291,9 @@ namespace 开发辅助工具.Manager
{ {
var Reference_FileName = IncludePath.Substring(iPos + 1).ToLower();//引用的项目文件名称 var Reference_FileName = IncludePath.Substring(iPos + 1).ToLower();//引用的项目文件名称
string dll_name = ""; string dll_name = "";
if (Reference_FileName == "MyDbV4.csproj".ToLower()) if (Reference_FileName == "RaUIV4.csproj".ToLower())
{ dll_name = "RaUI.dll"; }
else if (Reference_FileName == "MyDbV4.csproj".ToLower())
{ dll_name = "MyDb.dll"; } { dll_name = "MyDb.dll"; }
else if (Reference_FileName == "MyDb_SQLiteV4.csproj".ToLower()) else if (Reference_FileName == "MyDb_SQLiteV4.csproj".ToLower())
{ dll_name = "MyDb_SQLite.dll"; } { dll_name = "MyDb_SQLite.dll"; }

View File

@ -4,21 +4,30 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Windows.Documents;
using System.Windows.Forms; using System.Windows.Forms;
namespace namespace
{ {
static class Program static class Program
{ {
static System.Threading.Mutex run;
/// <summary> /// <summary>
/// 应用程序的主入口点。 /// 应用程序的主入口点。
/// </summary> /// </summary>
[STAThread] [STAThread]
static void Main(string[] args) static void Main(string[] args)
{ {
//run = new System.Threading.Mutex(true, "SuperDesign", out bool runone);
//if(!runone)
//{
// return;
//}
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
//run.ReleaseMutex();
//run.Close();
Init.Show(args); Init.Show(args);
} }
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)

View File

@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("开发辅助工具")] [assembly: AssemblyProduct("开发辅助工具")]
[assembly: AssemblyCopyright("Copyright © 2018-2021")] [assembly: AssemblyCopyright("Copyright © 2018-2024")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型 // 将 ComVisible 设置为 false 会使此程序集中的类型
@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 // 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
// 方法是按如下所示使用“*”: : // 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.2412.2003")] [assembly: AssemblyVersion("3.0.2412.2101")]
[assembly: AssemblyFileVersion("3.0.2412.2003")] [assembly: AssemblyFileVersion("3.0.2412.2101")]

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<StartArguments>get "E:\My Datas\My Codes\毕方项目\CSharp\HttpServer\Source\HttpServer\DyAPI_Web\DyWebAPI.csproj"</StartArguments> <StartArguments>get "E:\My Datas\My Codes\毕方项目\CSharp\SuperDesign\Source\开发辅助工具\SuperDesign.csproj"</StartArguments>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ProjectView>ShowAllFiles</ProjectView> <ProjectView>ShowAllFiles</ProjectView>

View File

@ -194,7 +194,7 @@ namespace 开发辅助工具.Tools
var AssemblyInfo = ryCommon.RyFiles.ReadAllText(Application.StartupPath + "\\SysDb\\AssemblyInfo.cs"); var AssemblyInfo = ryCommon.RyFiles.ReadAllText(Application.StartupPath + "\\SysDb\\AssemblyInfo.cs");
AssemblyInfo = AssemblyInfo.Replace("@AssemblyTitle", project_Eng_name); AssemblyInfo = AssemblyInfo.Replace("@AssemblyTitle", project_Eng_name);
AssemblyInfo = AssemblyInfo.Replace("@AssemblyProduct", project_Eng_name); AssemblyInfo = AssemblyInfo.Replace("@AssemblyProduct", project_Eng_name);
AssemblyInfo = AssemblyInfo.Replace("@Copyright", "Copyright 2010-2021"); AssemblyInfo = AssemblyInfo.Replace("@Copyright", "Copyright 2010-"+DateTime.Now.Year);
ryCommon.RyFiles.WriteAllText(source_folder + "\\Properties\\AssemblyInfo.cs", AssemblyInfo, Encoding.UTF8); ryCommon.RyFiles.WriteAllText(source_folder + "\\Properties\\AssemblyInfo.cs", AssemblyInfo, Encoding.UTF8);
#endregion #endregion
#region #region

View File

@ -86,6 +86,7 @@
this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components);
this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.BtnPublishLogs = new ryControls.ButtonEx(); this.BtnPublishLogs = new ryControls.ButtonEx();
this.Html日志ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
((System.ComponentModel.ISupportInitialize)(this.table1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.table1)).BeginInit();
this.groupBox1.SuspendLayout(); this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout(); this.groupBox2.SuspendLayout();
@ -721,12 +722,14 @@
// BtnSubmitGit // BtnSubmitGit
// //
this.BtnSubmitGit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.BtnSubmitGit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.BtnSubmitGit.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); this.BtnSubmitGit.BaseColor = System.Drawing.Color.Green;
this.BtnSubmitGit.ColorGradient = true;
this.BtnSubmitGit.Location = new System.Drawing.Point(741, 3); this.BtnSubmitGit.Location = new System.Drawing.Point(741, 3);
this.BtnSubmitGit.Name = "BtnSubmitGit"; this.BtnSubmitGit.Name = "BtnSubmitGit";
this.BtnSubmitGit.Size = new System.Drawing.Size(75, 33); this.BtnSubmitGit.Size = new System.Drawing.Size(75, 33);
this.BtnSubmitGit.TabIndex = 13; this.BtnSubmitGit.TabIndex = 13;
this.BtnSubmitGit.Text = "提交Git"; this.BtnSubmitGit.Text = "提交Git";
this.BtnSubmitGit.UseDefSkin = false;
this.BtnSubmitGit.UseVisualStyleBackColor = true; this.BtnSubmitGit.UseVisualStyleBackColor = true;
this.BtnSubmitGit.Click += new System.EventHandler(this.BtnSubmitGit_Click); this.BtnSubmitGit.Click += new System.EventHandler(this.BtnSubmitGit_Click);
// //
@ -787,30 +790,40 @@
// contextMenuStrip1 // contextMenuStrip1
// //
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolStripMenuItem}); this.ToolStripMenuItem,
this.Html日志ToolStripMenuItem});
this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(181, 48); this.contextMenuStrip1.Size = new System.Drawing.Size(181, 70);
this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening);
// //
// 设为正式版本ToolStripMenuItem // 设为正式版本ToolStripMenuItem
// //
this.ToolStripMenuItem.Name = "设为正式版本ToolStripMenuItem"; this.ToolStripMenuItem.Name = "设为正式版本ToolStripMenuItem";
this.ToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.ToolStripMenuItem.Size = new System.Drawing.Size(148, 22);
this.ToolStripMenuItem.Text = "设为正式版本"; this.ToolStripMenuItem.Text = "设为正式版本";
this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click); this.ToolStripMenuItem.Click += new System.EventHandler(this.ToolStripMenuItem_Click);
// //
// BtnPublishLogs // BtnPublishLogs
// //
this.BtnPublishLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.BtnPublishLogs.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.BtnPublishLogs.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95))))); this.BtnPublishLogs.BaseColor = System.Drawing.Color.Green;
this.BtnPublishLogs.ColorGradient = true;
this.BtnPublishLogs.Location = new System.Drawing.Point(822, 3); this.BtnPublishLogs.Location = new System.Drawing.Point(822, 3);
this.BtnPublishLogs.Name = "BtnPublishLogs"; this.BtnPublishLogs.Name = "BtnPublishLogs";
this.BtnPublishLogs.Size = new System.Drawing.Size(75, 33); this.BtnPublishLogs.Size = new System.Drawing.Size(75, 33);
this.BtnPublishLogs.TabIndex = 9; this.BtnPublishLogs.TabIndex = 9;
this.BtnPublishLogs.Text = "发布日志"; this.BtnPublishLogs.Text = "发布日志";
this.BtnPublishLogs.UseDefSkin = false;
this.BtnPublishLogs.UseVisualStyleBackColor = true; this.BtnPublishLogs.UseVisualStyleBackColor = true;
this.BtnPublishLogs.Click += new System.EventHandler(this.BtnPublishLogs_Click); this.BtnPublishLogs.Click += new System.EventHandler(this.BtnPublishLogs_Click);
// //
// 生成Html日志ToolStripMenuItem
//
this.Html日志ToolStripMenuItem.Name = "生成Html日志ToolStripMenuItem";
this.Html日志ToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
this.Html日志ToolStripMenuItem.Text = "生成Html日志";
this.Html日志ToolStripMenuItem.Click += new System.EventHandler(this.Html日志ToolStripMenuItem_Click);
//
// FrmProject // FrmProject
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@ -829,6 +842,7 @@
this.Deactivate += new System.EventHandler(this.FrmProject_Deactivate); this.Deactivate += new System.EventHandler(this.FrmProject_Deactivate);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmProject_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmProject_FormClosing);
this.Load += new System.EventHandler(this.FrmProject_Load); this.Load += new System.EventHandler(this.FrmProject_Load);
this.Shown += new System.EventHandler(this.FrmProject_Shown);
((System.ComponentModel.ISupportInitialize)(this.table1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.table1)).EndInit();
this.groupBox1.ResumeLayout(false); this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout(); this.groupBox1.PerformLayout();
@ -908,5 +922,6 @@
private ryControls.ButtonEx BtnSubmitGit; private ryControls.ButtonEx BtnSubmitGit;
private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem Html日志ToolStripMenuItem;
} }
} }

View File

@ -384,155 +384,8 @@ namespace 开发辅助工具.Tools
} }
private void FrmProject_Load(object sender, EventArgs e) private void FrmProject_Load(object sender, EventArgs e)
{ {
var k=QuickMsg.RyMemoryShare.WriteToMemory(this.Handle.ToInt32(),"SuperDesign" + rySafe.MD5Sha1.GetMD5(_ProjectPath)); Ini ini = new Ini(Application.StartupPath+"\\UserDb\\Win.dat");
var _path = GetBFFolderPath(); ini.WriteIni("ProjectHwnd", rySafe.MD5Sha1.GetMD5(_ProjectPath), this.Handle.ToInt32());
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("VerType", "");//版本类型(main表示主线版本,beta表示测试版)
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() {
Id = row["id"].ToInt(),
Version = row["VerStr"].ToString(),
VerType = row["VerType"].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 class ProjectLogItem
{ {
@ -1074,7 +927,9 @@ namespace 开发辅助工具.Tools
private void FrmProject_FormClosing(object sender, FormClosingEventArgs e) private void FrmProject_FormClosing(object sender, FormClosingEventArgs e)
{ {
SaveUpdateLog(); SaveUpdateLog();
QuickMsg.RyMemoryShare.DelMemory("SuperDesign" + rySafe.MD5Sha1.GetMD5(_ProjectPath)); Ini ini = new Ini(Application.StartupPath + "\\UserDb\\Win.dat");
ini.DelKey("ProjectHwnd", rySafe.MD5Sha1.GetMD5(_ProjectPath));
//QuickMsg.RyMemoryShare.DelMemory("S" + rySafe.MD5Sha1.GetMD5(_ProjectPath));
} }
private void BtnPublishLogs_Click(object sender, EventArgs e) private void BtnPublishLogs_Click(object sender, EventArgs e)
{ {
@ -1302,6 +1157,310 @@ namespace 开发辅助工具.Tools
ToolStripMenuItem.Text = "设为正式版本"; ToolStripMenuItem.Text = "设为正式版本";
} }
} }
private void FrmProject_Shown(object sender, EventArgs e)
{
var _path = GetBFFolderPath();
if (_path.Length > 0)
{
Ini ini = new Ini(_path + "\\查看项目.ryp");
var Main_Project = ini.ReadIni("project", "MainProject", "");
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("VerType", "");//版本类型(main表示主线版本,beta表示测试版)
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()
{
Id = row["id"].ToInt(),
Version = row["VerStr"].ToString(),
VerType = row["VerType"].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);
if (p_name == Main_Project)
{
tabControl1.SelectedTab = tab;
}
}
}
db.Free();
}
}
class UpContentInfo
{
public List<string> AddInfo { get; set; } = new List<string>();
public List<string> DelInfo { get; set; } = new List<string>();
/// <summary>
/// 改进信息
/// </summary>
public List<string> BetterInfo { get; set; } = new List<string>();
/// <summary>
/// 修复信息
/// </summary>
public List<string> FixInfo { get; set; } = new List<string>();
public List<string> OtherInfo { get; set; } = new List<string>();
}
private void Html日志ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (LvUpdateLogList.SelectedObjects.Count==0) { return; }
ryCommon.Ini ini = new Ini(GetBFFolderPath() + "\\查看项目.ryp");
var list = LvUpdateLogList.SelectedObjects;
List<UpLogItem> list2 = new List<UpLogItem>();
for (int i = 0; i < list.Count; i++)
{
var item = (UpLogItem)list[i];
list2.Add(item);
}
list2.Sort((x, y) => x.CompareTo(y));
var Main_Project = ini.ReadIni("project", "MainProject", "");
Dictionary<string, UpContentInfo> dict_up = new Dictionary<string, UpContentInfo>();
Dictionary<string, string> dict_eng_to_chs = new Dictionary<string, string>();
for (int i = 0; i < list2.Count; i++)
{
var item =list2[i];
try
{
JArray jarr = JArray.Parse(item.LogJson);
for (int j = 0; j < jarr.Count; j++)
{
var item_json = jarr[j];
var eng_name = item_json.GetJsonValue("ProjectName", "");
if (ini.ReadIni("NoVerHtml", eng_name, 0) == 1)
{
continue;
}
var ProjectChsName = item_json.GetJsonValue("ProjectChsName", "");
if (ProjectChsName.Length> 0)
{
if (!dict_eng_to_chs.ContainsKey(eng_name))
{ dict_eng_to_chs[eng_name] = ProjectChsName; }
}
if(!dict_up.ContainsKey(eng_name))
{
dict_up[eng_name] = new UpContentInfo();
}
var up_content = dict_up[eng_name];
var logs = item_json.GetJsonValue("LogText", "").Replace("\r", "\n").Replace("\n\n", "\n").Split('\n');
for (int m = 0; m < logs.Length; m++)
{
if (logs[m].Length == 0) { continue; }
var log_item = logs[m];
if (log_item.StartsWith("- *."))
{
log_item=log_item.Substring(2);
}
#region
var name = log_item.GetStr("[", "]");
if (name == "新增")
{
up_content.AddInfo.Add(log_item);
}
else if (name == "改进" || name == "优化")
{
up_content.BetterInfo.Add(log_item);
}
else if (name == "删除")
{
up_content.DelInfo.Add(log_item);
}
else if (name == "修复")
{
up_content.FixInfo.Add(log_item);
}
else
{
up_content.OtherInfo.Add(log_item);
}
#endregion
}
}
}
catch { }
}
string log_text = "";
if (dict_up.ContainsKey(Main_Project))
{
log_text += "<h4>" + System.Web.HttpUtility.HtmlEncode(dict_eng_to_chs.ContainsKey(Main_Project)? dict_eng_to_chs[Main_Project]:Main_Project) + "</h4>";
var main_info = dict_up[Main_Project];
for (int i = 0; i < main_info.AddInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.AddInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.BetterInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.BetterInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.DelInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.DelInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.FixInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.FixInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.OtherInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.OtherInfo[i]) + "</p>";
}
}
foreach (var item in dict_up)
{
if (item.Key == Main_Project) { continue; }
log_text += "\r\n<h4>" + System.Web.HttpUtility.HtmlEncode(dict_eng_to_chs.ContainsKey(item.Key) ? dict_eng_to_chs[item.Key] : item.Key) + "</h4>";
var main_info = item.Value;
for (int i = 0; i < main_info.AddInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.AddInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.BetterInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.BetterInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.DelInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.DelInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.FixInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.FixInfo[i]) + "</p>";
}
for (int i = 0; i < main_info.OtherInfo.Count; i++)
{
log_text += "\r\n<p>" + System.Web.HttpUtility.HtmlEncode(main_info.OtherInfo[i]) + "</p>";
}
}
RyFiles.CopyToClip(log_text.Trim());
}
} }
class UpLogItem class UpLogItem
{ {
@ -1311,5 +1470,9 @@ namespace 开发辅助工具.Tools
public string LogText { get; set; } = ""; public string LogText { get; set; } = "";
public string LogJson { get; set; } = ""; public string LogJson { get; set; } = "";
public long AddTime { get; set; } = 0; public long AddTime { get; set; } = 0;
public int CompareTo(UpLogItem other)
{
return RySoft.CompareVer(Version, other.Version);
}
} }
} }

View File

@ -126,6 +126,9 @@
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>285, 17</value> <value>285, 17</value>
</metadata> </metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>285, 17</value>
</metadata>
<metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <metadata name="contextMenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>388, 17</value> <value>388, 17</value>
</metadata> </metadata>

View File

@ -28,7 +28,7 @@ namespace SuperDesign.Tools.UpLog
{ {
JArray jarr = JArray.Parse(LogJson); JArray jarr = JArray.Parse(LogJson);
MdLog = SuperDesign.Manager.APIManager.GetMdLogText(jarr, DateTime.Now); MdLog = SuperDesign.Manager.APIManager.GetMdLogText(jarr, DateTime.Now);
HtmlLog = SuperDesign.Manager.APIManager.GetHtmlLogText(jarr, DateTime.Now); HtmlLog = SuperDesign.Manager.APIManager.GetHtmlLogText(BFFolderPath, jarr, DateTime.Now);
} }
catch { } catch { }
} }