commit 0d941aa8880b3fe78b16fb5b131f6768d341a621
Author: dong <1278815766@qq.com>
Date: Thu Apr 10 23:08:20 2025 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b43cbda
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,91 @@
+/.github
+/.idea
+/.vs
+/.vscode
+/Login/.idea
+/Login/.vs
+/KeyAuth-Service/.idea
+/Admin-Keyauth/.vs
+/Admin-Keyauth/.idea
+
+#环境变量
+.env
+
+#构建删除
+/Server/Run/*.exe
+/KeyAuth-Service/Run/*.exe
+
+# 忽略所有obj
+**/obj/**
+
+# 已构建程序不上传
+*.exe
+/Server/Run/*.exe
+/KeyAuth-Service/Run/*.exe
+
+# IDEA
+Server/.idea
+
+[Tt]humbs.db
+*.DS_Store
+
+#Visual Studio files
+*.[Oo]bj
+*.user
+*.aps
+*.pch
+*.vspscc
+*.vssscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.[Cc]ache
+*.ilk
+*.log
+*.lib
+*.sbr
+*.sdf
+*.opensdf
+*.unsuccessfulbuild
+ipch/
+obj/
+[Bb]in
+[Dd]ebug*/
+[Rr]elease*/
+Ankh.NoLoad
+
+#MonoDevelop
+*.pidb
+*.userprefs
+
+#Tooling
+_ReSharper*/
+*.resharper
+[Tt]est[Rr]esult*
+*.sass-cache
+
+#Project files
+[Bb]uild/
+
+#Subversion files
+.svn
+
+# Office Temp Files
+~$*
+
+#NuGet
+packages/
+
+#ncrunch
+*ncrunch*
+*crunch*.local.xml
+
+# visual studio database projects
+*.dbmdl
+
+#Test files
+*.testsettings
diff --git a/App.config b/App.config
new file mode 100644
index 0000000..5754728
--- /dev/null
+++ b/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
new file mode 100644
index 0000000..8aa9cc8
--- /dev/null
+++ b/Form1.Designer.cs
@@ -0,0 +1,205 @@
+namespace MD5Create
+{
+ partial class MD5Create
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows 窗体设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ this.Path_Text = new System.Windows.Forms.Label();
+ this.Path1_Box = new System.Windows.Forms.TextBox();
+ this.Choose1_Button = new System.Windows.Forms.Button();
+ this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.progressBar1 = new System.Windows.Forms.ProgressBar();
+ this.Start_Button = new System.Windows.Forms.Button();
+ this.Process_Text = new System.Windows.Forms.Label();
+ this.Process_Box = new System.Windows.Forms.RichTextBox();
+ this.Exit_Button = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.SuspendLayout();
+ //
+ // Path_Text
+ //
+ this.Path_Text.AutoSize = true;
+ this.Path_Text.Location = new System.Drawing.Point(12, 15);
+ this.Path_Text.Name = "Path_Text";
+ this.Path_Text.Size = new System.Drawing.Size(35, 12);
+ this.Path_Text.TabIndex = 0;
+ this.Path_Text.Text = "路径:";
+ //
+ // Path1_Box
+ //
+ this.Path1_Box.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.Path1_Box.Location = new System.Drawing.Point(49, 12);
+ this.Path1_Box.Name = "Path1_Box";
+ this.Path1_Box.ReadOnly = true;
+ this.Path1_Box.Size = new System.Drawing.Size(319, 21);
+ this.Path1_Box.TabIndex = 1;
+ //
+ // Choose1_Button
+ //
+ this.Choose1_Button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+ this.Choose1_Button.Location = new System.Drawing.Point(374, 12);
+ this.Choose1_Button.Name = "Choose1_Button";
+ this.Choose1_Button.Size = new System.Drawing.Size(32, 21);
+ this.Choose1_Button.TabIndex = 2;
+ this.Choose1_Button.Text = "...";
+ this.Choose1_Button.UseVisualStyleBackColor = true;
+ this.Choose1_Button.Click += new System.EventHandler(this.Choose1_Button_Click);
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(12, 53);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(0, 12);
+ this.label1.TabIndex = 3;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(12, 79);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(35, 12);
+ this.label2.TabIndex = 4;
+ this.label2.Text = "进度:";
+ //
+ // progressBar1
+ //
+ this.progressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.progressBar1.Location = new System.Drawing.Point(49, 76);
+ this.progressBar1.Name = "progressBar1";
+ this.progressBar1.Size = new System.Drawing.Size(357, 23);
+ this.progressBar1.TabIndex = 5;
+ //
+ // Start_Button
+ //
+ this.Start_Button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.Start_Button.Location = new System.Drawing.Point(12, 322);
+ this.Start_Button.Name = "Start_Button";
+ this.Start_Button.Size = new System.Drawing.Size(75, 23);
+ this.Start_Button.TabIndex = 6;
+ this.Start_Button.Text = "开始";
+ this.Start_Button.UseVisualStyleBackColor = true;
+ this.Start_Button.Click += new System.EventHandler(this.Start_Button_Click);
+ //
+ // Process_Text
+ //
+ this.Process_Text.AutoSize = true;
+ this.Process_Text.Location = new System.Drawing.Point(12, 47);
+ this.Process_Text.Name = "Process_Text";
+ this.Process_Text.Size = new System.Drawing.Size(35, 12);
+ this.Process_Text.TabIndex = 7;
+ this.Process_Text.Text = "版本:";
+ //
+ // Process_Box
+ //
+ this.Process_Box.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.Process_Box.Location = new System.Drawing.Point(49, 111);
+ this.Process_Box.Name = "Process_Box";
+ this.Process_Box.Size = new System.Drawing.Size(357, 203);
+ this.Process_Box.TabIndex = 8;
+ this.Process_Box.Text = "";
+ //
+ // Exit_Button
+ //
+ this.Exit_Button.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.Exit_Button.Location = new System.Drawing.Point(331, 322);
+ this.Exit_Button.Name = "Exit_Button";
+ this.Exit_Button.Size = new System.Drawing.Size(75, 23);
+ this.Exit_Button.TabIndex = 9;
+ this.Exit_Button.Text = "退出";
+ this.Exit_Button.UseVisualStyleBackColor = true;
+ this.Exit_Button.Click += new System.EventHandler(this.Exit_Button_Click);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(12, 111);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(35, 12);
+ this.label3.TabIndex = 10;
+ this.label3.Text = "执行:";
+ //
+ // textBox1
+ //
+ this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.textBox1.ForeColor = System.Drawing.SystemColors.WindowText;
+ this.textBox1.Location = new System.Drawing.Point(49, 42);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(357, 21);
+ this.textBox1.TabIndex = 11;
+ this.textBox1.Text = "1.0.0";
+ //
+ // MD5Create
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(418, 357);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.Exit_Button);
+ this.Controls.Add(this.Process_Box);
+ this.Controls.Add(this.Process_Text);
+ this.Controls.Add(this.Start_Button);
+ this.Controls.Add(this.progressBar1);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.Choose1_Button);
+ this.Controls.Add(this.Path1_Box);
+ this.Controls.Add(this.Path_Text);
+ this.Name = "MD5Create";
+ this.Text = "MD5Create";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label Path_Text;
+ private System.Windows.Forms.TextBox Path1_Box;
+ private System.Windows.Forms.Button Choose1_Button;
+ private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ProgressBar progressBar1;
+ private System.Windows.Forms.Button Start_Button;
+ private System.Windows.Forms.Label Process_Text;
+ private System.Windows.Forms.RichTextBox Process_Box;
+ private System.Windows.Forms.Button Exit_Button;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox textBox1;
+ }
+}
+
diff --git a/Form1.cs b/Form1.cs
new file mode 100644
index 0000000..357ed88
--- /dev/null
+++ b/Form1.cs
@@ -0,0 +1,219 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Xml;
+using Newtonsoft.Json;
+
+namespace MD5Create
+{
+ public partial class MD5Create : Form
+ {
+ public MD5Create()
+ {
+ InitializeComponent();
+ // Initialize progress bar
+ progressBar1.Minimum = 0;
+ progressBar1.Maximum = 100;
+ progressBar1.Value = 0;
+ progressBar1.Step = 1;
+ }
+
+ private void Start_Button_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(Path1_Box.Text))
+ {
+ MessageBox.Show("请先选择目录!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
+ if (string.IsNullOrWhiteSpace(textBox1.Text))
+ {
+ MessageBox.Show("请输入版本号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
+ return;
+ }
+
+ // Reset progress bar
+ progressBar1.Value = 0;
+
+ GenerateMD5Json(Path1_Box.Text);
+ }
+
+ private void Choose1_Button_Click(object sender, EventArgs e)
+ {
+ folderBrowserDialog1.Description = "请选择文件夹";
+ folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer;
+ folderBrowserDialog1.ShowNewFolderButton = true;
+ if (Path1_Box.Text.Length > 0) folderBrowserDialog1.SelectedPath = Path1_Box.Text;
+ if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
+ {
+ Path1_Box.Text = folderBrowserDialog1.SelectedPath;
+ }
+ }
+
+ private void Exit_Button_Click(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+
+ // 计算 MD5 的值
+ private string MD5Generation(string filePath)
+ {
+ using (var md5 = MD5.Create())
+ using (var stream = File.OpenRead(filePath))
+ {
+ byte[] hash = md5.ComputeHash(stream);
+ return BitConverter.ToString(hash).Replace("-", "").ToLower();
+ }
+ }
+
+ // 获取目录中文件总数(用于进度计算)
+ private int GetTotalFileCount(string directoryPath, string excludeFolder)
+ {
+ int count = Directory.GetFiles(directoryPath).Length;
+
+ foreach (var dir in Directory.GetDirectories(directoryPath))
+ {
+ if (dir.Equals(excludeFolder, StringComparison.OrdinalIgnoreCase))
+ continue;
+
+ count += GetTotalFileCount(dir, excludeFolder);
+ }
+ return count;
+ }
+
+ // 生成目录结构的 json 表示
+ private Dictionary GenerateDirectoryJson(string directoryPath, string rootPath,
+ int totalFiles, ref int processedFiles, string excludeFolder)
+ {
+ var result = new Dictionary();
+
+ // 处理当前目录文件
+ foreach (var file in Directory.GetFiles(directoryPath))
+ {
+ string fileName = Path.GetFileName(file);
+ result[fileName] = MD5Generation(file);
+
+ // 更新进度条
+ processedFiles++;
+ int progress = (int)((double)processedFiles / totalFiles * 100);
+ progressBar1.Invoke((MethodInvoker)(() =>
+ {
+ progressBar1.Value = Math.Min(progress, progressBar1.Maximum);
+ }));
+
+ // 显示处理路径
+ string relativePath = GetRelativePath(file, rootPath);
+ Process_Box.Invoke((MethodInvoker)(() =>
+ {
+ Process_Box.AppendText($".\\{relativePath}{Environment.NewLine}");
+ }));
+ }
+
+ // 递归处理子目录(自动跳过排除文件夹)
+ foreach (var dir in Directory.GetDirectories(directoryPath))
+ {
+ if (Path.GetFullPath(dir).Equals(Path.GetFullPath(excludeFolder), StringComparison.OrdinalIgnoreCase))
+ continue;
+
+ string dirName = Path.GetFileName(dir);
+ result[dirName] = GenerateDirectoryJson(dir, rootPath, totalFiles,
+ ref processedFiles, excludeFolder);
+ }
+
+ return result;
+ }
+
+ // 获取相对路径
+ private string GetRelativePath(string fullPath, string basePath)
+ {
+ if (!basePath.EndsWith(Path.DirectorySeparatorChar.ToString()))
+ basePath += Path.DirectorySeparatorChar;
+
+ Uri baseUri = new Uri(basePath);
+ Uri fullUri = new Uri(fullPath);
+ return Uri.UnescapeDataString(baseUri.MakeRelativeUri(fullUri).ToString()
+ .Replace('/', Path.DirectorySeparatorChar));
+ }
+
+ // 生成 json 文件
+ private void GenerateMD5Json(string rootDirectory)
+ {
+ if (!Directory.Exists(rootDirectory))
+ {
+ MessageBox.Show("指定的目录不存在!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ try
+ {
+ Process_Box.Clear();
+ progressBar1.Value = 0;
+ Application.DoEvents(); // 让UI立即更新
+
+ string md5FolderPath = Path.Combine(rootDirectory, "MD5");
+ Directory.CreateDirectory(md5FolderPath);
+
+ int totalFiles = GetTotalFileCount(rootDirectory, md5FolderPath);
+ int processedFiles = 0;
+
+ // 如果文件数量为0,直接设置进度为100%
+ if (totalFiles == 0)
+ {
+ progressBar1.Value = 100;
+ Process_Box.AppendText("没有找到任何文件\n");
+ return;
+ }
+
+ var directoryStructure = GenerateDirectoryJson(rootDirectory, rootDirectory, totalFiles, ref processedFiles, md5FolderPath);
+
+ // 创建包含版本号的新结构
+ var versionedStructure = new Dictionary
+ {
+ { "version", textBox1.Text.Trim() },
+ { "data", directoryStructure }
+ };
+
+ // 序列化和保存JSON
+ string json = JsonConvert.SerializeObject(versionedStructure, Newtonsoft.Json.Formatting.Indented);
+ string jsonMD5 = CalculateMD5FromString(json);
+ string outputPath = Path.Combine(md5FolderPath, $"{jsonMD5}.json");
+ File.WriteAllText(outputPath, json);
+
+ // 最终更新
+ progressBar1.Value = 100;
+ Process_Box.AppendText($"\nmd5.json文件已生成在:{outputPath}\n");
+ Process_Box.AppendText($"JSON内容MD5校验值:{jsonMD5}");
+ Process_Box.ScrollToCaret();
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show($"生成JSON文件时出错:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ // 计算字符串的MD5值
+ private string CalculateMD5FromString(string input)
+ {
+ using (var md5 = MD5.Create())
+ {
+ byte[] inputBytes = Encoding.UTF8.GetBytes(input);
+ byte[] hashBytes = md5.ComputeHash(inputBytes);
+
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < hashBytes.Length; i++)
+ {
+ sb.Append(hashBytes[i].ToString("x2")); // 使用小写十六进制格式
+ }
+ return sb.ToString();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Form1.resx b/Form1.resx
new file mode 100644
index 0000000..913dd0d
--- /dev/null
+++ b/Form1.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/MD5Create.csproj b/MD5Create.csproj
new file mode 100644
index 0000000..20ad39e
--- /dev/null
+++ b/MD5Create.csproj
@@ -0,0 +1,87 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {353C07CE-BA22-44F3-8816-5F97E2B9DDE0}
+ WinExe
+ MD5Create
+ MD5Create
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MD5Create.sln b/MD5Create.sln
new file mode 100644
index 0000000..f1e77a9
--- /dev/null
+++ b/MD5Create.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.13.35825.156 d17.13
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MD5Create", "MD5Create.csproj", "{353C07CE-BA22-44F3-8816-5F97E2B9DDE0}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {353C07CE-BA22-44F3-8816-5F97E2B9DDE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {353C07CE-BA22-44F3-8816-5F97E2B9DDE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {353C07CE-BA22-44F3-8816-5F97E2B9DDE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {353C07CE-BA22-44F3-8816-5F97E2B9DDE0}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {25B0F992-2814-48A9-9F14-6F5D10FF4855}
+ EndGlobalSection
+EndGlobal
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..4491413
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace MD5Create
+{
+ static class Program
+ {
+ ///
+ /// 应用程序的主入口点。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MD5Create());
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7a4fb7b
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MD5Create")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MD5Create")]
+[assembly: AssemblyCopyright("Copyright © 2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("353c07ce-ba22-44f3-8816-5f97e2b9dde0")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..3210cd4
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本: 4.0.30319.42000
+//
+// 对此文件的更改可能导致不正确的行为,如果
+// 重新生成代码,则所做更改将丢失。
+//
+//------------------------------------------------------------------------------
+
+namespace MD5Create.Properties
+{
+
+
+ ///
+ /// 强类型资源类,用于查找本地化字符串等。
+ ///
+ // 此类是由 StronglyTypedResourceBuilder
+ // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+ // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+ // (以 /str 作为命令选项),或重新生成 VS 项目。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// 返回此类使用的缓存 ResourceManager 实例。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MD5Create.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 重写当前线程的 CurrentUICulture 属性,对
+ /// 使用此强类型资源类的所有资源查找执行重写。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..3c6496a
--- /dev/null
+++ b/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace MD5Create.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Properties/Settings.settings b/Properties/Settings.settings
new file mode 100644
index 0000000..abf36c5
--- /dev/null
+++ b/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d9dfe04
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+Create md5.json
\ No newline at end of file
diff --git a/packages.config b/packages.config
new file mode 100644
index 0000000..fef83be
--- /dev/null
+++ b/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file