commit 1b6455593a6213b2e6fa56d99e52d99b3ceab81b
Author: 扫地僧 <357099073@qq.com>
Date: Tue Apr 28 00:49:13 2026 +0800
first commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a792529
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+antdui-demo/
+.vs
+.idea
\ No newline at end of file
diff --git a/Form1.Designer.cs b/Form1.Designer.cs
new file mode 100644
index 0000000..e7b7ffd
--- /dev/null
+++ b/Form1.Designer.cs
@@ -0,0 +1,43 @@
+namespace Vmianqian
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer? components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing)
+ {
+ components?.Dispose();
+ }
+
+ base.Dispose(disposing);
+ }
+
+ ///
+ /// Minimal designer stub. UI is built fully in code with AntdUI.
+ ///
+ private void InitializeComponent()
+ {
+ SuspendLayout();
+ //
+ // Form1
+ //
+ AutoScaleDimensions = new SizeF(7F, 17F);
+ AutoScaleMode = AutoScaleMode.Font;
+ ClientSize = new Size(1280, 820);
+ MinimumSize = new Size(1180, 760);
+ Name = "Form1";
+ StartPosition = FormStartPosition.CenterScreen;
+ Text = "V免签 PC端监听客户端";
+ ResumeLayout(false);
+ }
+ }
+}
diff --git a/Form1.cs b/Form1.cs
new file mode 100644
index 0000000..730a6b5
--- /dev/null
+++ b/Form1.cs
@@ -0,0 +1,1498 @@
+using System.Net;
+using System.Net.Http.Json;
+using System.Security.Cryptography;
+using System.Text;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using AntdUI;
+using WinLabel = System.Windows.Forms.Label;
+using WinPanel = System.Windows.Forms.Panel;
+using WinTextBox = System.Windows.Forms.TextBox;
+
+namespace Vmianqian
+{
+ public partial class Form1 : BorderlessForm
+ {
+ private readonly string _configFilePath = Path.Combine(AppContext.BaseDirectory, "appsettings.client.json");
+ private readonly JsonSerializerOptions _jsonOptions = new() { WriteIndented = true, PropertyNameCaseInsensitive = true };
+ private readonly HttpClient _httpClient = new();
+ private readonly System.Windows.Forms.Timer _runtimeTimer = new();
+ private readonly System.Windows.Forms.Timer _heartbeatTimer = new();
+
+ private DateTime _appStartTime = DateTime.Now;
+ private HttpListener? _httpListener;
+ private CancellationTokenSource? _listenerCancellationTokenSource;
+ private ClientConfig _config = new();
+ private bool _isSynchronizingNavigation;
+
+ private AntdUI.PageHeader titlebar = null!;
+ private AntdUI.PageHeader bottomBar = null!;
+ private AntdUI.Menu menu = null!;
+ private WinPanel contentHost = null!;
+
+ private AntdUI.Button buttonCollapse = null!;
+ private WinLabel lblRuntimeBottom = null!;
+
+ private string _currentPageKey = "home";
+
+ private WinPanel pageHome = null!;
+ private WinPanel pageWechat = null!;
+ private WinPanel pageAlipay = null!;
+ private WinPanel pageSettings = null!;
+
+ private AntdUI.Label lblTopNotice = null!;
+ private AntdUI.Label lblWechatStatusValue = null!;
+ private AntdUI.Label lblAlipayStatusValue = null!;
+
+ private AntdUI.Input txtServerUrl = null!;
+ private AntdUI.Input txtApiKey = null!;
+ private AntdUI.Input txtNotifyEmail = null!;
+ private AntdUI.Switch chkHeartbeatEnabled = null!;
+ private AntdUI.Button btnHeartbeatCheck = null!;
+ private WinTextBox txtLog = null!;
+
+ private AntdUI.Input txtWechatPath = null!;
+ private AntdUI.Input txtWechatId = null!;
+ private NumericUpDown numWechatInterval = null!;
+ private AntdUI.Checkbox chkWheel = null!;
+
+ private AntdUI.Input txtAliPath = null!;
+ private AntdUI.Input txtAliAppId = null!;
+ private AntdUI.Input txtAliPid = null!;
+ private NumericUpDown numAlipayInterval = null!;
+
+ private AntdUI.Input txtServicePort = null!;
+ private AntdUI.Input txtListenPath = null!;
+
+ private DataGridView gridWechatLogs = null!;
+ private DataGridView gridAlipayLogs = null!;
+
+ private AntdUI.Button btnSaveConfig = null!;
+ private AntdUI.Button btnStartService = null!;
+ private AntdUI.Button btnStopService = null!;
+
+ public Form1()
+ {
+ InitializeComponent();
+ BuildAntdDemoStyleUi();
+ Load += Form1_Load;
+ FormClosing += Form1_FormClosing;
+ }
+
+ private void BuildAntdDemoStyleUi()
+ {
+ BackColor = Color.White;
+ Font = new Font("Microsoft YaHei UI", 9F);
+ Text = "V免签 Demo";
+
+ BuildTitlebar();
+ BuildBottomBar();
+ BuildMenu();
+ BuildContentHost();
+
+ Controls.Add(contentHost);
+ Controls.Add(menu);
+ Controls.Add(bottomBar);
+ Controls.Add(titlebar);
+ }
+
+ private void BuildTitlebar()
+ {
+ titlebar = new AntdUI.PageHeader
+ {
+ Dock = DockStyle.Top,
+ Height = 44,
+ DividerShow = true,
+ ShowButton = true,
+ ShowIcon = true,
+ Text = "AntdUI",
+ SubText = "Demo"
+ };
+
+ lblTopNotice = new AntdUI.Label
+ {
+ Dock = DockStyle.Right,
+ Width = 260,
+ Text = "准备接入 V免签服务端通信",
+ TextAlign = ContentAlignment.MiddleRight,
+ ForeColor = Color.FromArgb(22, 119, 255)
+ };
+
+ lblAlipayStatusValue = new AntdUI.Label
+ {
+ Dock = DockStyle.Right,
+ Width = 88,
+ Text = "支付宝: 离线",
+ TextAlign = ContentAlignment.MiddleRight,
+ ForeColor = Color.Red
+ };
+
+ lblWechatStatusValue = new AntdUI.Label
+ {
+ Dock = DockStyle.Right,
+ Width = 76,
+ Text = "微信: 离线",
+ TextAlign = ContentAlignment.MiddleRight,
+ ForeColor = Color.Red
+ };
+
+ titlebar.Controls.Add(lblTopNotice);
+ titlebar.Controls.Add(lblAlipayStatusValue);
+ titlebar.Controls.Add(lblWechatStatusValue);
+ }
+
+ private void BuildBottomBar()
+ {
+ bottomBar = new AntdUI.PageHeader
+ {
+ Dock = DockStyle.Bottom,
+ Height = 40,
+ DividerShow = true,
+ UseLeftMargin = false
+ };
+
+ buttonCollapse = new AntdUI.Button
+ {
+ Dock = DockStyle.Left,
+ Width = 50,
+ Ghost = true,
+ Radius = 0,
+ WaveSize = 0,
+ IconRatio = 0.6F,
+ IconSvg = "MenuUnfoldOutlined",
+ ToggleIconSvg = "MenuFoldOutlined",
+ Toggle = true
+ };
+ buttonCollapse.Click += ButtonCollapse_Click;
+
+ lblRuntimeBottom = new WinLabel
+ {
+ Dock = DockStyle.Right,
+ Width = 220,
+ TextAlign = ContentAlignment.MiddleRight,
+ ForeColor = Color.Gray,
+ Text = "00天:00时:00分:00秒"
+ };
+
+ bottomBar.Controls.Add(lblRuntimeBottom);
+ bottomBar.Controls.Add(buttonCollapse);
+ }
+
+ private void BuildMenu()
+ {
+ menu = new AntdUI.Menu
+ {
+ Dock = DockStyle.Left,
+ Width = 220,
+ Collapsed = false,
+ Unique = true,
+ IconRatio = 1F,
+ Indent = true,
+ Round = false,
+ Radius = 0,
+ Font = new Font("Microsoft YaHei UI", 9F)
+ };
+ menu.SelectChanged += Menu_SelectChanged;
+ ReloadMenuItems();
+ }
+
+ private void ReloadMenuItems()
+ {
+ menu.Items.Clear();
+ menu.Items.Add(new AntdUI.MenuItem { Text = "首页", IconSvg = "HomeOutlined", Tag = "home" });
+ menu.Items.Add(new AntdUI.MenuItem { Text = "微信监控", IconSvg = "WechatOutlined", Tag = "wechat" });
+ menu.Items.Add(new AntdUI.MenuItem { Text = "支付宝监控", IconSvg = "AlipayCircleOutlined", Tag = "alipay" });
+ menu.Items.Add(new AntdUI.MenuItem { Text = "软件设置", IconSvg = "SettingOutlined", Tag = "settings" });
+ }
+
+ private void BuildContentHost()
+ {
+ contentHost = new WinPanel
+ {
+ Dock = DockStyle.Fill,
+ BackColor = Color.White
+ };
+
+ pageHome = CreatePagePanel();
+ pageWechat = CreatePagePanel();
+ pageAlipay = CreatePagePanel();
+ pageSettings = CreatePagePanel();
+
+ contentHost.Controls.Add(pageSettings);
+ contentHost.Controls.Add(pageAlipay);
+ contentHost.Controls.Add(pageWechat);
+ contentHost.Controls.Add(pageHome);
+
+ BuildHomePage();
+ BuildWechatPage();
+ BuildAlipayPage();
+ BuildSettingsPage();
+
+ pageHome.Resize += (_, _) => LayoutHomePage();
+ pageWechat.Resize += (_, _) => LayoutWechatPage();
+ pageAlipay.Resize += (_, _) => LayoutAlipayPage();
+ pageSettings.Resize += (_, _) => LayoutSettingsPage();
+
+ LayoutHomePage();
+ LayoutWechatPage();
+ LayoutAlipayPage();
+ LayoutSettingsPage();
+ }
+
+ private WinPanel CreatePagePanel()
+ {
+ return new WinPanel
+ {
+ Dock = DockStyle.Fill,
+ BackColor = Color.FromArgb(245, 247, 250),
+ AutoScroll = true
+ };
+ }
+
+ private void LayoutHomePage()
+ {
+ LayoutPageCards(pageHome, 20);
+
+ var logCard = FindCard(pageHome, "home-log");
+ if (logCard != null)
+ {
+ var bottom = pageHome.ClientSize.Height - 20;
+ logCard.Height = Math.Max(220, bottom - logCard.Top);
+
+ if (txtLog != null)
+ {
+ txtLog.Size = new Size(Math.Max(240, logCard.ClientSize.Width - 50), Math.Max(120, logCard.ClientSize.Height - 76));
+ }
+ }
+ }
+
+ private void LayoutWechatPage()
+ {
+ LayoutPageCards(pageWechat, 20);
+
+ var gridCard = FindCard(pageWechat, "wechat-log");
+ if (gridCard != null)
+ {
+ var bottom = pageWechat.ClientSize.Height - 20;
+ gridCard.Height = Math.Max(260, bottom - gridCard.Top);
+
+ if (gridWechatLogs != null)
+ {
+ gridWechatLogs.Size = new Size(Math.Max(240, gridCard.ClientSize.Width - 50), Math.Max(120, gridCard.ClientSize.Height - 76));
+ }
+ }
+ }
+
+ private void LayoutAlipayPage()
+ {
+ LayoutPageCards(pageAlipay, 20);
+
+ var gridCard = FindCard(pageAlipay, "alipay-log");
+ if (gridCard != null)
+ {
+ var bottom = pageAlipay.ClientSize.Height - 20;
+ gridCard.Height = Math.Max(260, bottom - gridCard.Top);
+
+ if (gridAlipayLogs != null)
+ {
+ gridAlipayLogs.Size = new Size(Math.Max(240, gridCard.ClientSize.Width - 50), Math.Max(120, gridCard.ClientSize.Height - 76));
+ }
+ }
+ }
+
+ private void LayoutSettingsPage()
+ {
+ LayoutPageCards(pageSettings, 20);
+ }
+
+ private static void LayoutPageCards(WinPanel page, int margin)
+ {
+ var targetWidth = Math.Max(320, page.ClientSize.Width - margin * 2);
+
+ foreach (Control control in page.Controls)
+ {
+ control.Left = margin;
+ control.Width = targetWidth;
+ }
+ }
+
+ private static Control? FindCard(Control parent, string tag)
+ {
+ foreach (Control control in parent.Controls)
+ {
+ if (string.Equals(control.Tag?.ToString(), tag, StringComparison.Ordinal))
+ {
+ return control;
+ }
+ }
+
+ return null;
+ }
+
+ private void BuildHomePage()
+ {
+ var summaryCard = CreateCardPanel(new Rectangle(20, 20, 1080, 120));
+ summaryCard.Tag = "home-summary";
+ summaryCard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+
+ var summaryTitle = new AntdUI.Label
+ {
+ Text = "欢迎使用 V免签 PC 监听客户端",
+ Font = new Font("Microsoft YaHei UI", 22F, FontStyle.Regular),
+ AutoSize = true,
+ Location = new Point(28, 24)
+ };
+
+ var summaryDesc = new AntdUI.Label
+ {
+ Text = "当前阶段先打通“PC端本地监听 -> V免签服务端回调 -> 心跳检测”链路,整体布局按 AntdUI Demo 风格复刻。",
+ AutoSize = false,
+ Location = new Point(30, 64),
+ Size = new Size(980, 28),
+ ForeColor = Color.DimGray
+ };
+
+ summaryCard.Controls.Add(summaryTitle);
+ summaryCard.Controls.Add(summaryDesc);
+
+ var configCard = CreateCardPanel(new Rectangle(20, 160, 1080, 250));
+ configCard.Tag = "home-config";
+ configCard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+
+ configCard.Controls.Add(CreateTitleLabel("V免签回调地址", 24, 20));
+ txtServerUrl = CreateInput(24, 48, 470, "例如:https://你的域名/pay/notify");
+ configCard.Controls.Add(txtServerUrl);
+
+ configCard.Controls.Add(CreateTitleLabel("通信密钥 / Token", 530, 20));
+ txtApiKey = CreateInput(530, 48, 350, "请输入与服务端约定的密钥");
+ configCard.Controls.Add(txtApiKey);
+
+ configCard.Controls.Add(CreateTitleLabel("通知邮箱", 24, 102));
+ txtNotifyEmail = CreateInput(24, 130, 260, "可选");
+ configCard.Controls.Add(txtNotifyEmail);
+
+ btnSaveConfig = new AntdUI.Button
+ {
+ Text = "保存配置",
+ Location = new Point(530, 128),
+ Size = new Size(110, 36),
+ };
+ btnSaveConfig.Click += btnSaveConfig_Click;
+
+ btnStartService = new AntdUI.Button
+ {
+ Text = "启动监听",
+ Location = new Point(660, 128),
+ Size = new Size(110, 36),
+ };
+ btnStartService.Click += btnStart_Click;
+
+ btnStopService = new AntdUI.Button
+ {
+ Text = "停止监听",
+ Location = new Point(790, 128),
+ Size = new Size(110, 36),
+ };
+ btnStopService.Click += btnStop_Click;
+
+ configCard.Controls.Add(btnSaveConfig);
+ configCard.Controls.Add(btnStartService);
+ configCard.Controls.Add(btnStopService);
+
+ configCard.Controls.Add(CreateTitleLabel("心跳检测", 24, 188));
+ chkHeartbeatEnabled = new AntdUI.Switch
+ {
+ Location = new Point(24, 214),
+ Size = new Size(62, 28),
+ AutoSize = false
+ };
+ chkHeartbeatEnabled.CheckedChanged += chkHeartbeatEnabled_CheckedChanged;
+
+ var heartbeatDesc = new AntdUI.Label
+ {
+ Text = "开启后后台每 30 秒自动检测一次,自动成功不写日志,失败才写。",
+ AutoSize = true,
+ Location = new Point(104, 219),
+ ForeColor = Color.DimGray
+ };
+
+ btnHeartbeatCheck = new AntdUI.Button
+ {
+ Text = "立即检测",
+ Location = new Point(530, 210),
+ Size = new Size(110, 34)
+ };
+ btnHeartbeatCheck.Click += btnHeartbeatCheck_Click;
+
+ configCard.Controls.Add(chkHeartbeatEnabled);
+ configCard.Controls.Add(heartbeatDesc);
+ configCard.Controls.Add(btnHeartbeatCheck);
+
+ var logCard = CreateCardPanel(new Rectangle(20, 430, 1080, 300));
+ logCard.Tag = "home-log";
+ logCard.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+
+ logCard.Controls.Add(CreateTitleLabel("运行日志", 24, 18));
+
+ txtLog = new WinTextBox
+ {
+ Location = new Point(24, 50),
+ Size = new Size(1030, 224),
+ Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right,
+ Multiline = true,
+ ScrollBars = ScrollBars.Vertical,
+ ReadOnly = true,
+ BackColor = Color.Black,
+ ForeColor = Color.Lime,
+ BorderStyle = BorderStyle.FixedSingle
+ };
+ logCard.Controls.Add(txtLog);
+
+ pageHome.Controls.Add(summaryCard);
+ pageHome.Controls.Add(configCard);
+ pageHome.Controls.Add(logCard);
+ }
+
+ private void BuildWechatPage()
+ {
+ var card = CreateCardPanel(new Rectangle(20, 20, 1080, 150));
+ card.Tag = "wechat-config";
+ card.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+
+ card.Controls.Add(CreateTitleLabel("微信安装路径", 24, 20));
+ txtWechatPath = CreateInput(24, 48, 390, "微信.exe 路径");
+ card.Controls.Add(txtWechatPath);
+
+ card.Controls.Add(CreateTitleLabel("微信 SID", 440, 20));
+ txtWechatId = CreateInput(440, 48, 220, "可选");
+ card.Controls.Add(txtWechatId);
+
+ card.Controls.Add(CreateTitleLabel("轮询频率(秒)", 690, 20));
+ numWechatInterval = new NumericUpDown
+ {
+ Location = new Point(690, 51),
+ Size = new Size(96, 23),
+ Minimum = 1,
+ Maximum = 3600,
+ Value = 5
+ };
+ card.Controls.Add(numWechatInterval);
+
+ chkWheel = new AntdUI.Checkbox
+ {
+ Text = "启用轮询",
+ Location = new Point(820, 50),
+ AutoSize = true
+ };
+ card.Controls.Add(chkWheel);
+
+ var desc = new AntdUI.Label
+ {
+ Text = "后续这里接入微信真实到账监听逻辑,目前保留参数配置与回调结果展示。",
+ AutoSize = false,
+ Location = new Point(24, 102),
+ Size = new Size(960, 24),
+ ForeColor = Color.DimGray
+ };
+ card.Controls.Add(desc);
+
+ var gridCard = CreateCardPanel(new Rectangle(20, 190, 1080, 540));
+ gridCard.Tag = "wechat-log";
+ gridCard.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ gridCard.Controls.Add(CreateTitleLabel("微信监听记录", 24, 18));
+
+ gridWechatLogs = CreateWechatGrid();
+ gridWechatLogs.Location = new Point(24, 50);
+ gridWechatLogs.Size = new Size(1030, 464);
+ gridWechatLogs.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ gridCard.Controls.Add(gridWechatLogs);
+
+ pageWechat.Controls.Add(card);
+ pageWechat.Controls.Add(gridCard);
+ }
+
+ private void BuildAlipayPage()
+ {
+ var card = CreateCardPanel(new Rectangle(20, 20, 1080, 150));
+ card.Tag = "alipay-config";
+ card.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+
+ card.Controls.Add(CreateTitleLabel("旺旺/支付宝路径", 24, 20));
+ txtAliPath = CreateInput(24, 48, 300, "程序路径");
+ card.Controls.Add(txtAliPath);
+
+ card.Controls.Add(CreateTitleLabel("应用 ID", 350, 20));
+ txtAliAppId = CreateInput(350, 48, 170, "AppId");
+ card.Controls.Add(txtAliAppId);
+
+ card.Controls.Add(CreateTitleLabel("用户 ID", 550, 20));
+ txtAliPid = CreateInput(550, 48, 170, "Pid/UserId");
+ card.Controls.Add(txtAliPid);
+
+ card.Controls.Add(CreateTitleLabel("轮询频率(秒)", 750, 20));
+ numAlipayInterval = new NumericUpDown
+ {
+ Location = new Point(750, 51),
+ Size = new Size(96, 23),
+ Minimum = 1,
+ Maximum = 3600,
+ Value = 5
+ };
+ card.Controls.Add(numAlipayInterval);
+
+ var desc = new AntdUI.Label
+ {
+ Text = "后续这里接入支付宝真实到账监听逻辑,目前保留参数配置与回调结果展示。",
+ AutoSize = false,
+ Location = new Point(24, 102),
+ Size = new Size(960, 24),
+ ForeColor = Color.DimGray
+ };
+ card.Controls.Add(desc);
+
+ var gridCard = CreateCardPanel(new Rectangle(20, 190, 1080, 540));
+ gridCard.Tag = "alipay-log";
+ gridCard.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ gridCard.Controls.Add(CreateTitleLabel("支付宝监听记录", 24, 18));
+
+ gridAlipayLogs = CreateAlipayGrid();
+ gridAlipayLogs.Location = new Point(24, 50);
+ gridAlipayLogs.Size = new Size(1030, 464);
+ gridAlipayLogs.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
+ gridCard.Controls.Add(gridAlipayLogs);
+
+ pageAlipay.Controls.Add(card);
+ pageAlipay.Controls.Add(gridCard);
+ }
+
+ private void BuildSettingsPage()
+ {
+ var card = CreateCardPanel(new Rectangle(20, 20, 1080, 260));
+ card.Tag = "settings-main";
+ card.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
+
+ card.Controls.Add(CreateTitleLabel("本地监听端口", 24, 20));
+ txtServicePort = CreateInput(24, 48, 180, "8989");
+ card.Controls.Add(txtServicePort);
+
+ card.Controls.Add(CreateTitleLabel("本地监听路径", 240, 20));
+ txtListenPath = CreateInput(240, 48, 240, "/notify/");
+ card.Controls.Add(txtListenPath);
+
+ var info = new AntdUI.Label
+ {
+ Text = "这个页面用于维护本地监听设置与项目说明。\r\n\r\n目标顺序:\r\n1. 先让本地监听和服务端回调稳定运行\r\n2. 再接入微信 PC 端监听\r\n3. 再接入支付宝 PC 端监听",
+ AutoSize = false,
+ Location = new Point(24, 105),
+ Size = new Size(920, 120),
+ ForeColor = Color.DimGray
+ };
+ card.Controls.Add(info);
+
+ pageSettings.Controls.Add(card);
+ }
+
+ private WinPanel CreateCardPanel(Rectangle bounds)
+ {
+ return new WinPanel
+ {
+ Bounds = bounds,
+ BackColor = Color.White,
+ BorderStyle = BorderStyle.FixedSingle
+ };
+ }
+
+ private AntdUI.Label CreateTitleLabel(string text, int x, int y)
+ {
+ return new AntdUI.Label
+ {
+ Text = text,
+ AutoSize = true,
+ Location = new Point(x, y)
+ };
+ }
+
+ private AntdUI.Input CreateInput(int x, int y, int width, string placeholder)
+ {
+ return new AntdUI.Input
+ {
+ Location = new Point(x, y),
+ Size = new Size(width, 36),
+ PlaceholderText = placeholder
+ };
+ }
+
+ private DataGridView CreateWechatGrid()
+ {
+ var grid = new DataGridView
+ {
+ AllowUserToAddRows = false,
+ AllowUserToDeleteRows = false,
+ ReadOnly = true,
+ RowHeadersVisible = false,
+ AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
+ BackgroundColor = Color.White,
+ BorderStyle = BorderStyle.FixedSingle
+ };
+
+ grid.Columns.Add("Shop", "收款方");
+ grid.Columns.Add("Amount", "金额");
+ grid.Columns.Add("Time", "时间");
+ grid.Columns.Add("Remark", "备注/订单号");
+ grid.Columns.Add("Callback", "回调状态");
+ return grid;
+ }
+
+ private DataGridView CreateAlipayGrid()
+ {
+ var grid = new DataGridView
+ {
+ AllowUserToAddRows = false,
+ AllowUserToDeleteRows = false,
+ ReadOnly = true,
+ RowHeadersVisible = false,
+ AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
+ BackgroundColor = Color.White,
+ BorderStyle = BorderStyle.FixedSingle
+ };
+
+ grid.Columns.Add("Index", "序号");
+ grid.Columns.Add("OrderNo", "订单号");
+ grid.Columns.Add("Amount", "金额");
+ grid.Columns.Add("Time", "时间");
+ grid.Columns.Add("Remark", "备注");
+ grid.Columns.Add("Callback", "回调状态");
+ return grid;
+ }
+
+ private void Form1_Load(object? sender, EventArgs e)
+ {
+ LoadConfig();
+ BindConfigToUi();
+ InitializeRuntimeTimer();
+ InitializeHeartbeatTimer();
+ SelectPage("home");
+ UpdateServiceStatus(false);
+ ApplyHeartbeatSetting();
+ Log("程序已启动。");
+ }
+
+ private void Form1_FormClosing(object? sender, FormClosingEventArgs e)
+ {
+ StopListener();
+ StopHeartbeat();
+ _runtimeTimer.Stop();
+ _runtimeTimer.Dispose();
+ _heartbeatTimer.Dispose();
+ _httpClient.Dispose();
+ }
+
+ private void InitializeRuntimeTimer()
+ {
+ _runtimeTimer.Interval = 1000;
+ _runtimeTimer.Tick += (_, _) =>
+ {
+ var span = DateTime.Now - _appStartTime;
+ lblRuntimeBottom.Text = $"{span.Days:00}天:{span.Hours:00}时:{span.Minutes:00}分:{span.Seconds:00}秒";
+ };
+ _runtimeTimer.Start();
+ }
+
+ private void InitializeHeartbeatTimer()
+ {
+ _heartbeatTimer.Tick += async (_, _) => await SendHeartbeatAsync(false);
+ }
+
+ private void ButtonCollapse_Click(object? sender, EventArgs e)
+ {
+ var nextCollapsed = !menu.Collapsed;
+
+ menu.SuspendLayout();
+ menu.Collapsed = nextCollapsed;
+ menu.Width = nextCollapsed ? 56 : 220;
+ ReloadMenuItems();
+ menu.ResumeLayout();
+ menu.Refresh();
+
+ buttonCollapse.Toggle = !nextCollapsed;
+ SyncMenuSelection();
+ }
+
+ private void Menu_SelectChanged(object? sender, MenuSelectEventArgs e)
+ {
+ if (_isSynchronizingNavigation)
+ {
+ return;
+ }
+
+ var tag = e.Value.Tag?.ToString();
+ if (!string.IsNullOrWhiteSpace(tag))
+ {
+ SelectPage(tag);
+ }
+ }
+
+ private void SyncMenuSelection()
+ {
+ _isSynchronizingNavigation = true;
+ try
+ {
+ switch (_currentPageKey)
+ {
+ case "home":
+ menu.SelectIndex(0, true);
+ break;
+ case "wechat":
+ menu.SelectIndex(1, true);
+ break;
+ case "alipay":
+ menu.SelectIndex(2, true);
+ break;
+ case "settings":
+ menu.SelectIndex(3, true);
+ break;
+ }
+ }
+ finally
+ {
+ _isSynchronizingNavigation = false;
+ }
+ }
+
+ private void SelectPage(string pageKey)
+ {
+ _currentPageKey = pageKey;
+
+ pageHome.Visible = pageKey == "home";
+ pageWechat.Visible = pageKey == "wechat";
+ pageAlipay.Visible = pageKey == "alipay";
+ pageSettings.Visible = pageKey == "settings";
+
+ if (pageHome.Visible) pageHome.BringToFront();
+ else if (pageWechat.Visible) pageWechat.BringToFront();
+ else if (pageAlipay.Visible) pageAlipay.BringToFront();
+ else if (pageSettings.Visible) pageSettings.BringToFront();
+
+ SyncMenuSelection();
+ }
+
+ private void LoadConfig()
+ {
+ if (!File.Exists(_configFilePath))
+ {
+ _config = new ClientConfig();
+ return;
+ }
+
+ var json = File.ReadAllText(_configFilePath, Encoding.UTF8);
+ _config = JsonSerializer.Deserialize(json, _jsonOptions) ?? new ClientConfig();
+ }
+
+ private void SaveConfig()
+ {
+ var json = JsonSerializer.Serialize(_config, _jsonOptions);
+ File.WriteAllText(_configFilePath, json, Encoding.UTF8);
+ }
+
+ private void BindConfigToUi()
+ {
+ txtServerUrl.Text = _config.ServerUrl;
+ txtApiKey.Text = _config.ApiKey;
+ txtNotifyEmail.Text = _config.NotifyEmail;
+ txtWechatPath.Text = _config.WechatPath;
+ txtWechatId.Text = _config.WechatSid;
+ txtAliPath.Text = _config.AlipayPath;
+ txtAliAppId.Text = _config.AlipayAppId;
+ txtAliPid.Text = _config.AlipayUserId;
+ txtServicePort.Text = _config.ListenPort.ToString();
+ txtListenPath.Text = _config.ListenPath;
+ numWechatInterval.Value = Math.Min(Math.Max(_config.WechatIntervalSeconds, 1), 3600);
+ numAlipayInterval.Value = Math.Min(Math.Max(_config.AlipayIntervalSeconds, 1), 3600);
+ chkWheel.Checked = _config.EnableWheelPolling;
+ chkHeartbeatEnabled.Checked = _config.EnableHeartbeat;
+ }
+
+ private void SaveUiToConfig()
+ {
+ _config.ServerUrl = NormalizeServerUrl(txtServerUrl.Text);
+ _config.ApiKey = txtApiKey.Text.Trim();
+ _config.NotifyEmail = txtNotifyEmail.Text.Trim();
+ _config.WechatPath = txtWechatPath.Text.Trim();
+ _config.WechatSid = txtWechatId.Text.Trim();
+ _config.AlipayPath = txtAliPath.Text.Trim();
+ _config.AlipayAppId = txtAliAppId.Text.Trim();
+ _config.AlipayUserId = txtAliPid.Text.Trim();
+ _config.ListenPort = ParsePort(txtServicePort.Text);
+ _config.ListenPath = string.IsNullOrWhiteSpace(txtListenPath.Text) ? "/notify/" : txtListenPath.Text.Trim();
+ _config.WechatIntervalSeconds = (int)numWechatInterval.Value;
+ _config.AlipayIntervalSeconds = (int)numAlipayInterval.Value;
+ _config.EnableWheelPolling = chkWheel.Checked;
+ _config.EnableHeartbeat = chkHeartbeatEnabled.Checked;
+ }
+
+ private static int ParsePort(string text)
+ {
+ if (!int.TryParse(text, out var port) || port < 1 || port > 65535)
+ {
+ return 8989;
+ }
+
+ return port;
+ }
+
+ private void btnSaveConfig_Click(object? sender, EventArgs e)
+ {
+ try
+ {
+ SaveUiToConfig();
+ SaveConfig();
+ ApplyHeartbeatSetting();
+ Log("配置已保存。");
+ }
+ catch (Exception ex)
+ {
+ Log($"保存配置失败:{ex.Message}");
+ MessageBox.Show(ex.Message, "保存失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private async void btnStart_Click(object? sender, EventArgs e)
+ {
+ try
+ {
+ SaveUiToConfig();
+ ValidateConfig(_config);
+ SaveConfig();
+ await StartListenerAsync();
+ UpdateServiceStatus(true);
+ Log($"本地监听已启动:{BuildLocalListenUrl(_config)}");
+ }
+ catch (Exception ex)
+ {
+ UpdateServiceStatus(false);
+ Log($"启动监听失败:{ex.Message}");
+ MessageBox.Show(ex.Message, "启动失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void btnStop_Click(object? sender, EventArgs e)
+ {
+ StopListener();
+ UpdateServiceStatus(false);
+ Log("监听已停止。");
+ }
+
+ private async Task StartListenerAsync()
+ {
+ StopListener();
+
+ _listenerCancellationTokenSource = new CancellationTokenSource();
+ _httpListener = new HttpListener();
+
+ var prefix = BuildHttpPrefix(_config);
+ _httpListener.Prefixes.Add(prefix);
+ _httpListener.Start();
+
+ _ = Task.Run(() => ListenLoopAsync(_listenerCancellationTokenSource.Token));
+ await Task.CompletedTask;
+ }
+
+ private void StopListener()
+ {
+ try
+ {
+ _listenerCancellationTokenSource?.Cancel();
+ }
+ catch
+ {
+ }
+
+ try
+ {
+ if (_httpListener is { IsListening: true })
+ {
+ _httpListener.Stop();
+ }
+ }
+ catch
+ {
+ }
+
+ try
+ {
+ _httpListener?.Close();
+ }
+ catch
+ {
+ }
+
+ _httpListener = null;
+ _listenerCancellationTokenSource?.Dispose();
+ _listenerCancellationTokenSource = null;
+ }
+
+ private async Task ListenLoopAsync(CancellationToken cancellationToken)
+ {
+ if (_httpListener == null)
+ {
+ return;
+ }
+
+ while (!cancellationToken.IsCancellationRequested && _httpListener.IsListening)
+ {
+ try
+ {
+ var context = await _httpListener.GetContextAsync();
+ _ = Task.Run(() => HandleRequestAsync(context), cancellationToken);
+ }
+ catch (HttpListenerException)
+ {
+ break;
+ }
+ catch (ObjectDisposedException)
+ {
+ break;
+ }
+ catch (Exception ex)
+ {
+ Log($"监听循环异常:{ex.Message}");
+ }
+ }
+ }
+
+ private async Task HandleRequestAsync(HttpListenerContext context)
+ {
+ try
+ {
+ if (!string.Equals(context.Request.HttpMethod, "POST", StringComparison.OrdinalIgnoreCase))
+ {
+ await WriteJsonResponseAsync(context.Response, 405, new { ok = false, message = "Only POST is supported." });
+ return;
+ }
+
+ using var reader = new StreamReader(context.Request.InputStream, context.Request.ContentEncoding ?? Encoding.UTF8);
+ var body = await reader.ReadToEndAsync();
+ Log($"收到本地事件:{body}");
+
+ var paymentEvent = JsonSerializer.Deserialize(body, _jsonOptions);
+ if (paymentEvent == null)
+ {
+ await WriteJsonResponseAsync(context.Response, 400, new { ok = false, message = "请求体不能为空。" });
+ return;
+ }
+
+ paymentEvent.ReceivedAt = paymentEvent.ReceivedAt == default ? DateTimeOffset.Now : paymentEvent.ReceivedAt;
+ paymentEvent.Raw ??= body;
+
+ var callbackResult = await ForwardEventToServerAsync(paymentEvent);
+ AddPaymentLog(paymentEvent, callbackResult);
+ await WriteJsonResponseAsync(context.Response, 200, new
+ {
+ ok = true,
+ forwarded = true,
+ statusCode = (int)callbackResult.StatusCode,
+ responseBody = callbackResult.ResponseBody
+ });
+ }
+ catch (Exception ex)
+ {
+ Log($"处理请求失败:{ex.Message}");
+ await WriteJsonResponseAsync(context.Response, 500, new { ok = false, message = ex.Message });
+ }
+ }
+
+ private async Task ForwardEventToServerAsync(PaymentEvent paymentEvent)
+ {
+ var serverUrl = NormalizeServerUrl(_config.ServerUrl);
+ if (string.IsNullOrWhiteSpace(serverUrl))
+ {
+ return new ServerCallbackResult
+ {
+ StatusCode = HttpStatusCode.OK,
+ ResponseBody = "未配置服务端 URL,已跳过回调。"
+ };
+ }
+
+ var payload = new ServerCallbackPayload
+ {
+ ApiKey = _config.ApiKey,
+ Channel = paymentEvent.Channel,
+ Amount = paymentEvent.Amount,
+ OrderNo = paymentEvent.OrderNo,
+ TradeNo = paymentEvent.TradeNo,
+ Payer = paymentEvent.Payer,
+ Status = paymentEvent.Status,
+ ReceivedAt = paymentEvent.ReceivedAt,
+ Raw = paymentEvent.Raw
+ };
+
+ Log($"转发到服务端:{serverUrl}");
+ var response = await _httpClient.PostAsJsonAsync(serverUrl, payload, _jsonOptions);
+ var responseBody = await response.Content.ReadAsStringAsync();
+ Log($"服务端响应:HTTP {(int)response.StatusCode} {response.StatusCode},内容:{responseBody}");
+
+ return new ServerCallbackResult
+ {
+ StatusCode = response.StatusCode,
+ ResponseBody = responseBody
+ };
+ }
+
+ private void AddPaymentLog(PaymentEvent paymentEvent, ServerCallbackResult callbackResult)
+ {
+ if (InvokeRequired)
+ {
+ BeginInvoke(() => AddPaymentLog(paymentEvent, callbackResult));
+ return;
+ }
+
+ var callbackText = callbackResult.StatusCode == HttpStatusCode.OK ? "成功" : $"失败({(int)callbackResult.StatusCode})";
+
+ if (string.Equals(paymentEvent.Channel, "alipay", StringComparison.OrdinalIgnoreCase))
+ {
+ gridAlipayLogs.Rows.Insert(
+ 0,
+ gridAlipayLogs.Rows.Count + 1,
+ paymentEvent.OrderNo,
+ paymentEvent.Amount.ToString("0.00"),
+ paymentEvent.ReceivedAt.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
+ paymentEvent.Payer,
+ callbackText);
+
+ lblAlipayStatusValue.Text = "支付宝: 在线";
+ lblAlipayStatusValue.ForeColor = Color.LimeGreen;
+ }
+ else
+ {
+ gridWechatLogs.Rows.Insert(
+ 0,
+ paymentEvent.Payer,
+ paymentEvent.Amount.ToString("0.00"),
+ paymentEvent.ReceivedAt.LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss"),
+ paymentEvent.OrderNo,
+ callbackText);
+
+ lblWechatStatusValue.Text = "微信: 在线";
+ lblWechatStatusValue.ForeColor = Color.LimeGreen;
+ }
+ }
+
+ private void chkHeartbeatEnabled_CheckedChanged(object? sender, EventArgs e)
+ {
+ ApplyHeartbeatSetting();
+ }
+
+ private async void btnHeartbeatCheck_Click(object? sender, EventArgs e)
+ {
+ await SendHeartbeatAsync(true);
+ }
+
+ private void ApplyHeartbeatSetting()
+ {
+ SaveUiToConfig();
+
+ if (_config.EnableHeartbeat)
+ {
+ StartHeartbeat();
+ }
+ else
+ {
+ StopHeartbeat();
+ }
+ }
+
+ private void StartHeartbeat()
+ {
+ const int intervalSeconds = 30;
+ _heartbeatTimer.Interval = intervalSeconds * 1000;
+
+ if (!_heartbeatTimer.Enabled)
+ {
+ _heartbeatTimer.Start();
+ }
+ else
+ {
+ _heartbeatTimer.Stop();
+ _heartbeatTimer.Start();
+ }
+ }
+
+ private void StopHeartbeat()
+ {
+ if (_heartbeatTimer.Enabled)
+ {
+ _heartbeatTimer.Stop();
+ }
+ }
+
+ private async Task SendHeartbeatAsync(bool writeSuccessLog)
+ {
+ try
+ {
+ var serverUrl = NormalizeServerUrl(txtServerUrl.Text);
+ var apiKey = txtApiKey.Text.Trim();
+
+ if (string.IsNullOrWhiteSpace(serverUrl))
+ {
+ Log("心跳检测异常:未配置服务端地址。");
+ return;
+ }
+
+ if (string.IsNullOrWhiteSpace(apiKey))
+ {
+ Log("心跳检测异常:未配置通信密钥。");
+ return;
+ }
+
+ var heartbeatCheckResult = await RequestHeartbeatStateAsync(serverUrl, apiKey);
+
+ if (!heartbeatCheckResult.IsSuccessStatusCode)
+ {
+ Log($"心跳检测异常:HTTP {(int)heartbeatCheckResult.StatusCode} {heartbeatCheckResult.StatusCode},内容:{heartbeatCheckResult.ResponseBody}");
+ return;
+ }
+
+ var heartbeatResponse = heartbeatCheckResult.Response;
+ if (heartbeatResponse == null)
+ {
+ Log($"心跳检测异常:服务端返回无法解析,内容:{heartbeatCheckResult.ResponseBody}");
+ return;
+ }
+
+ if (heartbeatResponse.Code != 1)
+ {
+ Log($"心跳检测异常:code={heartbeatResponse.Code},msg={heartbeatResponse.Msg}");
+ return;
+ }
+
+ if (heartbeatResponse.Data == null)
+ {
+ if (writeSuccessLog)
+ {
+ Log("心跳检测:心跳=正常,最后支付=-,最后心跳=-");
+ }
+
+ return;
+ }
+
+ var lastPayText = FormatUnixTimestamp(heartbeatResponse.Data.LastPay);
+ var lastHeartText = FormatUnixTimestamp(heartbeatResponse.Data.LastHeart);
+
+ if (heartbeatResponse.Data.JkState == 1)
+ {
+ if (writeSuccessLog)
+ {
+ Log($"心跳检测:心跳=正常,最后支付={lastPayText},最后心跳={lastHeartText}");
+ }
+
+ return;
+ }
+
+ var stateText = heartbeatResponse.Data.JkState switch
+ {
+ 0 => "掉线",
+ -1 => "未绑定监控端",
+ _ => $"未知({heartbeatResponse.Data.JkState?.ToString() ?? "null"})"
+ };
+
+ Log($"心跳检测异常:状态={stateText},最后支付={lastPayText},最后心跳={lastHeartText},返回JSON={heartbeatCheckResult.ResponseBody}");
+ }
+ catch (Exception ex)
+ {
+ Log($"心跳检测异常:{ex.Message}");
+ }
+ }
+
+ private async Task RequestHeartbeatStateAsync(string serverUrl, string apiKey)
+ {
+ var timestamp = DateTimeOffset.Now.ToUnixTimeSeconds().ToString();
+
+ var candidates = new[]
+ {
+ BuildHeartbeatStateUrl(serverUrl, timestamp, CreateMd5(timestamp + apiKey)),
+ BuildHeartbeatStateUrl(serverUrl, timestamp, CreateMd5(apiKey + timestamp)),
+ BuildHeartbeatStateUrl(serverUrl, timestamp, CreateMd5(timestamp + apiKey), apiKey, null),
+ BuildHeartbeatStateUrl(serverUrl, timestamp, CreateMd5(apiKey + timestamp), apiKey, null),
+ BuildHeartbeatStateUrl(serverUrl, timestamp, CreateMd5(timestamp + apiKey), null, apiKey),
+ BuildHeartbeatStateUrl(serverUrl, timestamp, CreateMd5(apiKey + timestamp), null, apiKey)
+ };
+
+ HeartbeatRequestResult? lastResult = null;
+
+ foreach (var url in candidates.Distinct())
+ {
+ var response = await _httpClient.GetAsync(url);
+ var responseBody = await response.Content.ReadAsStringAsync();
+
+ HeartbeatStateResponse? parsed = null;
+ try
+ {
+ parsed = JsonSerializer.Deserialize(responseBody, _jsonOptions);
+ }
+ catch
+ {
+ }
+
+ var result = new HeartbeatRequestResult
+ {
+ StatusCode = response.StatusCode,
+ ResponseBody = responseBody,
+ Response = parsed
+ };
+
+ lastResult = result;
+
+ if (!response.IsSuccessStatusCode)
+ {
+ continue;
+ }
+
+ if (parsed?.Code == 1)
+ {
+ return result;
+ }
+
+ if (parsed?.Msg?.Contains("签名校验不通过", StringComparison.OrdinalIgnoreCase) == true)
+ {
+ continue;
+ }
+
+ return result;
+ }
+
+ return lastResult ?? new HeartbeatRequestResult
+ {
+ StatusCode = HttpStatusCode.ServiceUnavailable,
+ ResponseBody = "未获得有效心跳响应。"
+ };
+ }
+
+ private async Task WriteJsonResponseAsync(HttpListenerResponse response, int statusCode, object payload)
+ {
+ response.StatusCode = statusCode;
+ response.ContentType = "application/json; charset=utf-8";
+
+ var json = JsonSerializer.Serialize(payload, _jsonOptions);
+ var bytes = Encoding.UTF8.GetBytes(json);
+ response.ContentLength64 = bytes.Length;
+ await response.OutputStream.WriteAsync(bytes);
+ response.OutputStream.Close();
+ }
+
+ private void UpdateServiceStatus(bool isRunning)
+ {
+ lblTopNotice.Text = isRunning
+ ? $"监听中:{BuildLocalListenUrl(_config)}"
+ : "准备接入 V免签服务端通信";
+ }
+
+ private static void ValidateConfig(ClientConfig config)
+ {
+ if (config.ListenPort < 1 || config.ListenPort > 65535)
+ {
+ throw new InvalidOperationException("监听端口必须在 1-65535 之间。");
+ }
+
+ var serverUrl = NormalizeServerUrl(config.ServerUrl);
+ if (!string.IsNullOrWhiteSpace(serverUrl) &&
+ (!Uri.TryCreate(serverUrl, UriKind.Absolute, out var serverUri) ||
+ (serverUri.Scheme != Uri.UriSchemeHttp && serverUri.Scheme != Uri.UriSchemeHttps)))
+ {
+ throw new InvalidOperationException("服务端 URL 必须是有效的 HTTP/HTTPS 地址。");
+ }
+ }
+
+ private static string NormalizeServerUrl(string? url)
+ {
+ var value = url?.Trim() ?? string.Empty;
+ if (string.IsNullOrWhiteSpace(value))
+ {
+ return string.Empty;
+ }
+
+ if (!value.StartsWith("http://", StringComparison.OrdinalIgnoreCase) &&
+ !value.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
+ {
+ value = "https://" + value;
+ }
+
+ return value;
+ }
+
+ private void Log(string message)
+ {
+ if (InvokeRequired)
+ {
+ BeginInvoke(() => Log(message));
+ return;
+ }
+
+ txtLog.AppendText($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}{Environment.NewLine}");
+ }
+
+ private static string NormalizeListenPath(string? path)
+ {
+ var normalized = string.IsNullOrWhiteSpace(path) ? "/notify/" : path.Trim();
+
+ if (!normalized.StartsWith('/'))
+ {
+ normalized = "/" + normalized;
+ }
+
+ if (!normalized.EndsWith('/'))
+ {
+ normalized += "/";
+ }
+
+ return normalized;
+ }
+
+ private static string BuildHttpPrefix(ClientConfig config)
+ {
+ return $"http://+:{config.ListenPort}{NormalizeListenPath(config.ListenPath)}";
+ }
+
+ private static string BuildLocalListenUrl(ClientConfig config)
+ {
+ return $"http://127.0.0.1:{config.ListenPort}{NormalizeListenPath(config.ListenPath)}";
+ }
+
+ private static string BuildHeartbeatStateUrl(string serverUrl, string timestamp, string sign, string? key = null, string? userKey = null)
+ {
+ if (!Uri.TryCreate(serverUrl, UriKind.Absolute, out var baseUri))
+ {
+ throw new InvalidOperationException("服务端地址格式无效。");
+ }
+
+ var stateUri = new Uri(baseUri, "/getState");
+ var query = new List
+ {
+ $"t={Uri.EscapeDataString(timestamp)}",
+ $"sign={Uri.EscapeDataString(sign)}"
+ };
+
+ if (!string.IsNullOrWhiteSpace(key))
+ {
+ query.Add($"key={Uri.EscapeDataString(key)}");
+ }
+
+ if (!string.IsNullOrWhiteSpace(userKey))
+ {
+ query.Add($"userkey={Uri.EscapeDataString(userKey)}");
+ }
+
+ return $"{stateUri}?{string.Join("&", query)}";
+ }
+
+ private static string CreateMd5(string input)
+ {
+ var bytes = Encoding.UTF8.GetBytes(input);
+ var hash = MD5.HashData(bytes);
+ var builder = new StringBuilder(hash.Length * 2);
+
+ foreach (var b in hash)
+ {
+ builder.Append(b.ToString("x2"));
+ }
+
+ return builder.ToString();
+ }
+
+ private static string FormatUnixTimestamp(long? timestamp)
+ {
+ if (timestamp == null || timestamp <= 0)
+ {
+ return "-";
+ }
+
+ try
+ {
+ return DateTimeOffset.FromUnixTimeSeconds(timestamp.Value).LocalDateTime.ToString("yyyy-MM-dd HH:mm:ss");
+ }
+ catch
+ {
+ return timestamp.Value.ToString();
+ }
+ }
+ }
+
+ public sealed class ClientConfig
+ {
+ public string ServerUrl { get; set; } = "https://zf.yunzer.cn/7eed756ca37ca057370ea9bb208d25fa";
+ public string ApiKey { get; set; } = "7eed756ca37ca057370ea9bb208d25fa";
+ public string NotifyEmail { get; set; } = string.Empty;
+ public string WechatPath { get; set; } = string.Empty;
+ public string WechatSid { get; set; } = string.Empty;
+ public string AlipayPath { get; set; } = string.Empty;
+ public string AlipayAppId { get; set; } = string.Empty;
+ public string AlipayUserId { get; set; } = string.Empty;
+ public int ListenPort { get; set; } = 8989;
+ public int WechatIntervalSeconds { get; set; } = 5;
+ public int AlipayIntervalSeconds { get; set; } = 5;
+ public bool EnableWheelPolling { get; set; } = true;
+ public bool EnableHeartbeat { get; set; } = false;
+ public int HeartbeatIntervalSeconds { get; set; } = 30;
+ public string ListenPath { get; set; } = "/notify/";
+ }
+
+ public sealed class PaymentEvent
+ {
+ public string Channel { get; set; } = "wechat";
+ public decimal Amount { get; set; }
+ public string OrderNo { get; set; } = string.Empty;
+ public string TradeNo { get; set; } = string.Empty;
+ public string Payer { get; set; } = string.Empty;
+ public string Status { get; set; } = "success";
+ public DateTimeOffset ReceivedAt { get; set; }
+ public string? Raw { get; set; }
+ }
+
+ public sealed class ServerCallbackPayload
+ {
+ public string ApiKey { get; set; } = string.Empty;
+ public string Channel { get; set; } = string.Empty;
+ public decimal Amount { get; set; }
+ public string OrderNo { get; set; } = string.Empty;
+ public string TradeNo { get; set; } = string.Empty;
+ public string Payer { get; set; } = string.Empty;
+ public string Status { get; set; } = string.Empty;
+ public DateTimeOffset ReceivedAt { get; set; }
+ public string? Raw { get; set; }
+ }
+
+ public sealed class ServerCallbackResult
+ {
+ public HttpStatusCode StatusCode { get; set; }
+ public string ResponseBody { get; set; } = string.Empty;
+ }
+
+ public sealed class HeartbeatRequestResult
+ {
+ public HttpStatusCode StatusCode { get; set; }
+ public string ResponseBody { get; set; } = string.Empty;
+ public HeartbeatStateResponse? Response { get; set; }
+ public bool IsSuccessStatusCode => (int)StatusCode >= 200 && (int)StatusCode <= 299;
+ }
+
+ public sealed class HeartbeatStateResponse
+ {
+ public int Code { get; set; }
+ public string Msg { get; set; } = string.Empty;
+ public HeartbeatStateData? Data { get; set; }
+ }
+
+ public sealed class HeartbeatStateData
+ {
+ [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
+ [JsonPropertyName("lastpay")]
+ public long? LastPay { get; set; }
+
+ [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
+ [JsonPropertyName("lastheart")]
+ public long? LastHeart { get; set; }
+
+ [JsonPropertyName("jkstate")]
+ [JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
+ public int? JkState { get; set; }
+ }
+}
diff --git a/Form1.resx b/Form1.resx
new file mode 100644
index 0000000..8b2ff64
--- /dev/null
+++ b/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
\ No newline at end of file
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..bfee7f0
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,17 @@
+namespace Vmianqian
+{
+ internal static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+ Application.Run(new Form1());
+ }
+ }
+}
\ No newline at end of file
diff --git a/Vmianqian.csproj b/Vmianqian.csproj
new file mode 100644
index 0000000..218258a
--- /dev/null
+++ b/Vmianqian.csproj
@@ -0,0 +1,21 @@
+
+
+
+ WinExe
+ net10.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Vmianqian.csproj.user b/Vmianqian.csproj.user
new file mode 100644
index 0000000..b7d3840
--- /dev/null
+++ b/Vmianqian.csproj.user
@@ -0,0 +1,209 @@
+
+
+
+
+ Form
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ UserControl
+
+
+ Form
+
+
+
\ No newline at end of file
diff --git a/Vmianqian.slnx b/Vmianqian.slnx
new file mode 100644
index 0000000..ddc2508
--- /dev/null
+++ b/Vmianqian.slnx
@@ -0,0 +1,3 @@
+
+
+
diff --git a/bin/Debug/net10.0-windows/AntdUI.dll b/bin/Debug/net10.0-windows/AntdUI.dll
new file mode 100644
index 0000000..af9fbb7
Binary files /dev/null and b/bin/Debug/net10.0-windows/AntdUI.dll differ
diff --git a/bin/Debug/net10.0-windows/Vmianqian.deps.json b/bin/Debug/net10.0-windows/Vmianqian.deps.json
new file mode 100644
index 0000000..4b67351
--- /dev/null
+++ b/bin/Debug/net10.0-windows/Vmianqian.deps.json
@@ -0,0 +1,41 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v10.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v10.0": {
+ "Vmianqian/1.0.0": {
+ "dependencies": {
+ "AntdUI": "2.3.10"
+ },
+ "runtime": {
+ "Vmianqian.dll": {}
+ }
+ },
+ "AntdUI/2.3.10": {
+ "runtime": {
+ "lib/net10.0-windows7.0/AntdUI.dll": {
+ "assemblyVersion": "2.3.10.0",
+ "fileVersion": "2.3.10.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Vmianqian/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "AntdUI/2.3.10": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
+ "path": "antdui/2.3.10",
+ "hashPath": "antdui.2.3.10.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/bin/Debug/net10.0-windows/Vmianqian.dll b/bin/Debug/net10.0-windows/Vmianqian.dll
new file mode 100644
index 0000000..9d01bb5
Binary files /dev/null and b/bin/Debug/net10.0-windows/Vmianqian.dll differ
diff --git a/bin/Debug/net10.0-windows/Vmianqian.exe b/bin/Debug/net10.0-windows/Vmianqian.exe
new file mode 100644
index 0000000..60bd185
Binary files /dev/null and b/bin/Debug/net10.0-windows/Vmianqian.exe differ
diff --git a/bin/Debug/net10.0-windows/Vmianqian.pdb b/bin/Debug/net10.0-windows/Vmianqian.pdb
new file mode 100644
index 0000000..2c87c21
Binary files /dev/null and b/bin/Debug/net10.0-windows/Vmianqian.pdb differ
diff --git a/bin/Debug/net10.0-windows/Vmianqian.runtimeconfig.json b/bin/Debug/net10.0-windows/Vmianqian.runtimeconfig.json
new file mode 100644
index 0000000..3c285dd
--- /dev/null
+++ b/bin/Debug/net10.0-windows/Vmianqian.runtimeconfig.json
@@ -0,0 +1,19 @@
+{
+ "runtimeOptions": {
+ "tfm": "net10.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "10.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "10.0.0"
+ }
+ ],
+ "configProperties": {
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
+ "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/bin/Debug/net10.0-windows/appsettings.client.json b/bin/Debug/net10.0-windows/appsettings.client.json
new file mode 100644
index 0000000..b06bf84
--- /dev/null
+++ b/bin/Debug/net10.0-windows/appsettings.client.json
@@ -0,0 +1,17 @@
+{
+ "ServerUrl": "https://zf.yunzer.cn",
+ "ApiKey": "7eed756ca37ca057370ea9bb208",
+ "NotifyEmail": "1066960883@qq.com",
+ "WechatPath": "",
+ "WechatSid": "",
+ "AlipayPath": "",
+ "AlipayAppId": "",
+ "AlipayUserId": "",
+ "ListenPort": 8989,
+ "WechatIntervalSeconds": 5,
+ "AlipayIntervalSeconds": 5,
+ "EnableWheelPolling": true,
+ "EnableHeartbeat": true,
+ "HeartbeatIntervalSeconds": 30,
+ "ListenPath": "/notify/"
+}
\ No newline at end of file
diff --git a/build_verify/AntdUI.dll b/build_verify/AntdUI.dll
new file mode 100644
index 0000000..af9fbb7
Binary files /dev/null and b/build_verify/AntdUI.dll differ
diff --git a/build_verify/Vmianqian.deps.json b/build_verify/Vmianqian.deps.json
new file mode 100644
index 0000000..4b67351
--- /dev/null
+++ b/build_verify/Vmianqian.deps.json
@@ -0,0 +1,41 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v10.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v10.0": {
+ "Vmianqian/1.0.0": {
+ "dependencies": {
+ "AntdUI": "2.3.10"
+ },
+ "runtime": {
+ "Vmianqian.dll": {}
+ }
+ },
+ "AntdUI/2.3.10": {
+ "runtime": {
+ "lib/net10.0-windows7.0/AntdUI.dll": {
+ "assemblyVersion": "2.3.10.0",
+ "fileVersion": "2.3.10.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "Vmianqian/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "AntdUI/2.3.10": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
+ "path": "antdui/2.3.10",
+ "hashPath": "antdui.2.3.10.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/build_verify/Vmianqian.dll b/build_verify/Vmianqian.dll
new file mode 100644
index 0000000..9d01bb5
Binary files /dev/null and b/build_verify/Vmianqian.dll differ
diff --git a/build_verify/Vmianqian.pdb b/build_verify/Vmianqian.pdb
new file mode 100644
index 0000000..2c87c21
Binary files /dev/null and b/build_verify/Vmianqian.pdb differ
diff --git a/build_verify/Vmianqian.runtimeconfig.json b/build_verify/Vmianqian.runtimeconfig.json
new file mode 100644
index 0000000..3c285dd
--- /dev/null
+++ b/build_verify/Vmianqian.runtimeconfig.json
@@ -0,0 +1,19 @@
+{
+ "runtimeOptions": {
+ "tfm": "net10.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "10.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "10.0.0"
+ }
+ ],
+ "configProperties": {
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
+ "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/obj/Debug/net10.0-windows/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/obj/Debug/net10.0-windows/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..925b135
--- /dev/null
+++ b/obj/Debug/net10.0-windows/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
diff --git a/obj/Debug/net10.0-windows/Vmianqian.AssemblyInfo.cs b/obj/Debug/net10.0-windows/Vmianqian.AssemblyInfo.cs
new file mode 100644
index 0000000..c3c8df7
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.AssemblyInfo.cs
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("Vmianqian")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("Vmianqian")]
+[assembly: System.Reflection.AssemblyTitleAttribute("Vmianqian")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/obj/Debug/net10.0-windows/Vmianqian.AssemblyInfoInputs.cache b/obj/Debug/net10.0-windows/Vmianqian.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..755f1c1
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+d7ed290d0d9cfd207fcc9453947b7882a6ba615b446fcf42dcec6201b8c88be8
diff --git a/obj/Debug/net10.0-windows/Vmianqian.Form1.resources b/obj/Debug/net10.0-windows/Vmianqian.Form1.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/obj/Debug/net10.0-windows/Vmianqian.Form1.resources differ
diff --git a/obj/Debug/net10.0-windows/Vmianqian.GeneratedMSBuildEditorConfig.editorconfig b/obj/Debug/net10.0-windows/Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..bedfe9f
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,24 @@
+is_global = true
+build_property.ApplicationManifest =
+build_property.StartupObject =
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.TargetFramework = net10.0-windows
+build_property.TargetFrameworkIdentifier = .NETCoreApp
+build_property.TargetFrameworkVersion = v10.0
+build_property.TargetPlatformMinVersion = 7.0
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = Vmianqian
+build_property.ProjectDir = E:\Demo\C\Vmianqian\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+build_property.CsWinRTUseWindowsUIXamlProjections = false
+build_property.EffectiveAnalysisLevelStyle = 10.0
+build_property.EnableCodeStyleSeverity =
diff --git a/obj/Debug/net10.0-windows/Vmianqian.GlobalUsings.g.cs b/obj/Debug/net10.0-windows/Vmianqian.GlobalUsings.g.cs
new file mode 100644
index 0000000..18cabb0
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.GlobalUsings.g.cs
@@ -0,0 +1,10 @@
+//
+global using System;
+global using System.Collections.Generic;
+global using System.Drawing;
+global using System.IO;
+global using System.Linq;
+global using System.Net.Http;
+global using System.Threading;
+global using System.Threading.Tasks;
+global using System.Windows.Forms;
diff --git a/obj/Debug/net10.0-windows/Vmianqian.assets.cache b/obj/Debug/net10.0-windows/Vmianqian.assets.cache
new file mode 100644
index 0000000..6146dbd
Binary files /dev/null and b/obj/Debug/net10.0-windows/Vmianqian.assets.cache differ
diff --git a/obj/Debug/net10.0-windows/Vmianqian.csproj.AssemblyReference.cache b/obj/Debug/net10.0-windows/Vmianqian.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..8fee1d4
Binary files /dev/null and b/obj/Debug/net10.0-windows/Vmianqian.csproj.AssemblyReference.cache differ
diff --git a/obj/Debug/net10.0-windows/Vmianqian.csproj.BuildWithSkipAnalyzers b/obj/Debug/net10.0-windows/Vmianqian.csproj.BuildWithSkipAnalyzers
new file mode 100644
index 0000000..e69de29
diff --git a/obj/Debug/net10.0-windows/Vmianqian.csproj.CoreCompileInputs.cache b/obj/Debug/net10.0-windows/Vmianqian.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..4479b50
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+d16415670cf935c5792f13225a100e298ac07b7e6e8b89ede2c6253cce6cee33
diff --git a/obj/Debug/net10.0-windows/Vmianqian.csproj.FileListAbsolute.txt b/obj/Debug/net10.0-windows/Vmianqian.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..00513a1
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.csproj.FileListAbsolute.txt
@@ -0,0 +1,24 @@
+E:\Demo\C\Vmianqian\bin\Debug\net10.0-windows\Vmianqian.deps.json
+E:\Demo\C\Vmianqian\bin\Debug\net10.0-windows\Vmianqian.runtimeconfig.json
+E:\Demo\C\Vmianqian\bin\Debug\net10.0-windows\Vmianqian.dll
+E:\Demo\C\Vmianqian\bin\Debug\net10.0-windows\Vmianqian.pdb
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.Form1.resources
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.csproj.GenerateResource.cache
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.AssemblyInfoInputs.cache
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.AssemblyInfo.cs
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.csproj.CoreCompileInputs.cache
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.dll
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\refint\Vmianqian.dll
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.pdb
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.genruntimeconfig.cache
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\ref\Vmianqian.dll
+E:\Demo\C\Vmianqian\bin\Debug\net10.0-windows\AntdUI.dll
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.csproj.AssemblyReference.cache
+E:\Demo\C\Vmianqian\obj\Debug\net10.0-windows\Vmianqian.csproj.Up2Date
+E:\Demo\C\Vmianqian\bin\Debug\net10.0-windows\Vmianqian.exe
+E:\Demo\C\Vmianqian\build_verify\Vmianqian.deps.json
+E:\Demo\C\Vmianqian\build_verify\Vmianqian.runtimeconfig.json
+E:\Demo\C\Vmianqian\build_verify\Vmianqian.dll
+E:\Demo\C\Vmianqian\build_verify\Vmianqian.pdb
+E:\Demo\C\Vmianqian\build_verify\AntdUI.dll
diff --git a/obj/Debug/net10.0-windows/Vmianqian.csproj.GenerateResource.cache b/obj/Debug/net10.0-windows/Vmianqian.csproj.GenerateResource.cache
new file mode 100644
index 0000000..e42b674
Binary files /dev/null and b/obj/Debug/net10.0-windows/Vmianqian.csproj.GenerateResource.cache differ
diff --git a/obj/Debug/net10.0-windows/Vmianqian.csproj.Up2Date b/obj/Debug/net10.0-windows/Vmianqian.csproj.Up2Date
new file mode 100644
index 0000000..e69de29
diff --git a/obj/Debug/net10.0-windows/Vmianqian.designer.deps.json b/obj/Debug/net10.0-windows/Vmianqian.designer.deps.json
new file mode 100644
index 0000000..9aefb04
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.designer.deps.json
@@ -0,0 +1,28 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v10.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v10.0": {
+ "AntdUI/2.3.10": {
+ "runtime": {
+ "lib/net10.0-windows7.0/AntdUI.dll": {
+ "assemblyVersion": "2.3.10.0",
+ "fileVersion": "2.3.10.0"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "AntdUI/2.3.10": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
+ "path": "antdui/2.3.10",
+ "hashPath": "antdui.2.3.10.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/obj/Debug/net10.0-windows/Vmianqian.designer.runtimeconfig.json b/obj/Debug/net10.0-windows/Vmianqian.designer.runtimeconfig.json
new file mode 100644
index 0000000..978c6fa
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.designer.runtimeconfig.json
@@ -0,0 +1,25 @@
+{
+ "runtimeOptions": {
+ "tfm": "net10.0",
+ "frameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "10.0.0"
+ },
+ {
+ "name": "Microsoft.WindowsDesktop.App",
+ "version": "10.0.0"
+ }
+ ],
+ "additionalProbingPaths": [
+ "C:\\Users\\Administrator\\.dotnet\\store\\|arch|\\|tfm|",
+ "C:\\Users\\Administrator\\.nuget\\packages",
+ "C:\\Softwares\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+ ],
+ "configProperties": {
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
+ "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false,
+ "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/obj/Debug/net10.0-windows/Vmianqian.dll b/obj/Debug/net10.0-windows/Vmianqian.dll
new file mode 100644
index 0000000..9d01bb5
Binary files /dev/null and b/obj/Debug/net10.0-windows/Vmianqian.dll differ
diff --git a/obj/Debug/net10.0-windows/Vmianqian.genruntimeconfig.cache b/obj/Debug/net10.0-windows/Vmianqian.genruntimeconfig.cache
new file mode 100644
index 0000000..c420b59
--- /dev/null
+++ b/obj/Debug/net10.0-windows/Vmianqian.genruntimeconfig.cache
@@ -0,0 +1 @@
+06af8958efc8199d17b3e5352714ede4c860a98abdd43801bf6807d2659e5f95
diff --git a/obj/Debug/net10.0-windows/Vmianqian.pdb b/obj/Debug/net10.0-windows/Vmianqian.pdb
new file mode 100644
index 0000000..2c87c21
Binary files /dev/null and b/obj/Debug/net10.0-windows/Vmianqian.pdb differ
diff --git a/obj/Debug/net10.0-windows/apphost.exe b/obj/Debug/net10.0-windows/apphost.exe
new file mode 100644
index 0000000..60bd185
Binary files /dev/null and b/obj/Debug/net10.0-windows/apphost.exe differ
diff --git a/obj/Debug/net10.0-windows/ref/Vmianqian.dll b/obj/Debug/net10.0-windows/ref/Vmianqian.dll
new file mode 100644
index 0000000..b7eb72b
Binary files /dev/null and b/obj/Debug/net10.0-windows/ref/Vmianqian.dll differ
diff --git a/obj/Debug/net10.0-windows/refint/Vmianqian.dll b/obj/Debug/net10.0-windows/refint/Vmianqian.dll
new file mode 100644
index 0000000..b7eb72b
Binary files /dev/null and b/obj/Debug/net10.0-windows/refint/Vmianqian.dll differ
diff --git a/obj/Release/net10.0-windows/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs b/obj/Release/net10.0-windows/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..925b135
--- /dev/null
+++ b/obj/Release/net10.0-windows/.NETCoreApp,Version=v10.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
diff --git a/obj/Release/net10.0-windows/Vmianqian.AssemblyInfo.cs b/obj/Release/net10.0-windows/Vmianqian.AssemblyInfo.cs
new file mode 100644
index 0000000..3066ac8
--- /dev/null
+++ b/obj/Release/net10.0-windows/Vmianqian.AssemblyInfo.cs
@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+//
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("Vmianqian")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("Vmianqian")]
+[assembly: System.Reflection.AssemblyTitleAttribute("Vmianqian")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/obj/Release/net10.0-windows/Vmianqian.AssemblyInfoInputs.cache b/obj/Release/net10.0-windows/Vmianqian.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..b384551
--- /dev/null
+++ b/obj/Release/net10.0-windows/Vmianqian.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+bb18ffbf4a653410f1f8c3c4ab222800a3c3de5990547926b3c957a15167d80b
diff --git a/obj/Release/net10.0-windows/Vmianqian.GeneratedMSBuildEditorConfig.editorconfig b/obj/Release/net10.0-windows/Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..bedfe9f
--- /dev/null
+++ b/obj/Release/net10.0-windows/Vmianqian.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,24 @@
+is_global = true
+build_property.ApplicationManifest =
+build_property.StartupObject =
+build_property.ApplicationDefaultFont =
+build_property.ApplicationHighDpiMode =
+build_property.ApplicationUseCompatibleTextRendering =
+build_property.ApplicationVisualStyles =
+build_property.TargetFramework = net10.0-windows
+build_property.TargetFrameworkIdentifier = .NETCoreApp
+build_property.TargetFrameworkVersion = v10.0
+build_property.TargetPlatformMinVersion = 7.0
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = Vmianqian
+build_property.ProjectDir = E:\Demo\C\Vmianqian\
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
+build_property.CsWinRTUseWindowsUIXamlProjections = false
+build_property.EffectiveAnalysisLevelStyle = 10.0
+build_property.EnableCodeStyleSeverity =
diff --git a/obj/Release/net10.0-windows/Vmianqian.GlobalUsings.g.cs b/obj/Release/net10.0-windows/Vmianqian.GlobalUsings.g.cs
new file mode 100644
index 0000000..18cabb0
--- /dev/null
+++ b/obj/Release/net10.0-windows/Vmianqian.GlobalUsings.g.cs
@@ -0,0 +1,10 @@
+//
+global using System;
+global using System.Collections.Generic;
+global using System.Drawing;
+global using System.IO;
+global using System.Linq;
+global using System.Net.Http;
+global using System.Threading;
+global using System.Threading.Tasks;
+global using System.Windows.Forms;
diff --git a/obj/Release/net10.0-windows/Vmianqian.assets.cache b/obj/Release/net10.0-windows/Vmianqian.assets.cache
new file mode 100644
index 0000000..b25ef84
Binary files /dev/null and b/obj/Release/net10.0-windows/Vmianqian.assets.cache differ
diff --git a/obj/Release/net10.0-windows/Vmianqian.csproj.AssemblyReference.cache b/obj/Release/net10.0-windows/Vmianqian.csproj.AssemblyReference.cache
new file mode 100644
index 0000000..8fee1d4
Binary files /dev/null and b/obj/Release/net10.0-windows/Vmianqian.csproj.AssemblyReference.cache differ
diff --git a/obj/Vmianqian.csproj.nuget.dgspec.json b/obj/Vmianqian.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..b29a631
--- /dev/null
+++ b/obj/Vmianqian.csproj.nuget.dgspec.json
@@ -0,0 +1,375 @@
+{
+ "format": 1,
+ "restore": {
+ "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj": {}
+ },
+ "projects": {
+ "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj",
+ "projectName": "Vmianqian",
+ "projectPath": "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj",
+ "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\",
+ "outputPath": "E:\\Demo\\C\\Vmianqian\\obj\\",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "C:\\Softwares\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\Administrator\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net10.0-windows"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "C:\\Program Files\\dotnet\\library-packs": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net10.0-windows": {
+ "framework": "net10.0-windows7.0",
+ "targetAlias": "net10.0-windows",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "all"
+ },
+ "SdkAnalysisLevel": "10.0.200"
+ },
+ "frameworks": {
+ "net10.0-windows": {
+ "framework": "net10.0-windows7.0",
+ "targetAlias": "net10.0-windows",
+ "dependencies": {
+ "AntdUI": {
+ "target": "Package",
+ "version": "[2.3.10, )"
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ },
+ "Microsoft.WindowsDesktop.App.WindowsForms": {
+ "privateAssets": "none"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202/PortableRuntimeIdentifierGraph.json",
+ "packagesToPrune": {
+ "Microsoft.CSharp": "(,4.7.32767]",
+ "Microsoft.VisualBasic": "(,10.4.32767]",
+ "Microsoft.Win32.Primitives": "(,4.3.32767]",
+ "Microsoft.Win32.Registry": "(,5.0.32767]",
+ "Microsoft.Win32.Registry.AccessControl": "(,10.0.32767]",
+ "Microsoft.Win32.SystemEvents": "(,10.0.32767]",
+ "runtime.any.System.Collections": "(,4.3.32767]",
+ "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
+ "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
+ "runtime.any.System.Globalization": "(,4.3.32767]",
+ "runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
+ "runtime.any.System.IO": "(,4.3.32767]",
+ "runtime.any.System.Reflection": "(,4.3.32767]",
+ "runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
+ "runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
+ "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
+ "runtime.any.System.Runtime": "(,4.3.32767]",
+ "runtime.any.System.Runtime.Handles": "(,4.3.32767]",
+ "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
+ "runtime.any.System.Text.Encoding": "(,4.3.32767]",
+ "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
+ "runtime.any.System.Threading.Tasks": "(,4.3.32767]",
+ "runtime.any.System.Threading.Timer": "(,4.3.32767]",
+ "runtime.aot.System.Collections": "(,4.3.32767]",
+ "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
+ "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
+ "runtime.aot.System.Globalization": "(,4.3.32767]",
+ "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
+ "runtime.aot.System.IO": "(,4.3.32767]",
+ "runtime.aot.System.Reflection": "(,4.3.32767]",
+ "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
+ "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
+ "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
+ "runtime.aot.System.Runtime": "(,4.3.32767]",
+ "runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
+ "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
+ "runtime.aot.System.Text.Encoding": "(,4.3.32767]",
+ "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
+ "runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
+ "runtime.aot.System.Threading.Timer": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
+ "runtime.unix.System.Console": "(,4.3.32767]",
+ "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
+ "runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
+ "runtime.unix.System.Net.Primitives": "(,4.3.32767]",
+ "runtime.unix.System.Net.Sockets": "(,4.3.32767]",
+ "runtime.unix.System.Private.Uri": "(,4.3.32767]",
+ "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
+ "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
+ "runtime.win.System.Console": "(,4.3.32767]",
+ "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
+ "runtime.win.System.IO.FileSystem": "(,4.3.32767]",
+ "runtime.win.System.Net.Primitives": "(,4.3.32767]",
+ "runtime.win.System.Net.Sockets": "(,4.3.32767]",
+ "runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
+ "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
+ "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
+ "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
+ "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.win7.System.Private.Uri": "(,4.3.32767]",
+ "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "System.AppContext": "(,4.3.32767]",
+ "System.Buffers": "(,5.0.32767]",
+ "System.CodeDom": "(,10.0.32767]",
+ "System.Collections": "(,4.3.32767]",
+ "System.Collections.Concurrent": "(,4.3.32767]",
+ "System.Collections.Immutable": "(,10.0.32767]",
+ "System.Collections.NonGeneric": "(,4.3.32767]",
+ "System.Collections.Specialized": "(,4.3.32767]",
+ "System.ComponentModel": "(,4.3.32767]",
+ "System.ComponentModel.Annotations": "(,4.3.32767]",
+ "System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
+ "System.ComponentModel.Primitives": "(,4.3.32767]",
+ "System.ComponentModel.TypeConverter": "(,4.3.32767]",
+ "System.Configuration.ConfigurationManager": "(,10.0.32767]",
+ "System.Console": "(,4.3.32767]",
+ "System.Data.Common": "(,4.3.32767]",
+ "System.Data.DataSetExtensions": "(,4.4.32767]",
+ "System.Diagnostics.Contracts": "(,4.3.32767]",
+ "System.Diagnostics.Debug": "(,4.3.32767]",
+ "System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
+ "System.Diagnostics.EventLog": "(,10.0.32767]",
+ "System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
+ "System.Diagnostics.PerformanceCounter": "(,10.0.32767]",
+ "System.Diagnostics.Process": "(,4.3.32767]",
+ "System.Diagnostics.StackTrace": "(,4.3.32767]",
+ "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
+ "System.Diagnostics.Tools": "(,4.3.32767]",
+ "System.Diagnostics.TraceSource": "(,4.3.32767]",
+ "System.Diagnostics.Tracing": "(,4.3.32767]",
+ "System.DirectoryServices": "(,10.0.32767]",
+ "System.Drawing.Common": "(,10.0.32767]",
+ "System.Drawing.Primitives": "(,4.3.32767]",
+ "System.Dynamic.Runtime": "(,4.3.32767]",
+ "System.Formats.Asn1": "(,10.0.32767]",
+ "System.Formats.Nrbf": "(,10.0.32767]",
+ "System.Formats.Tar": "(,10.0.32767]",
+ "System.Globalization": "(,4.3.32767]",
+ "System.Globalization.Calendars": "(,4.3.32767]",
+ "System.Globalization.Extensions": "(,4.3.32767]",
+ "System.IO": "(,4.3.32767]",
+ "System.IO.Compression": "(,4.3.32767]",
+ "System.IO.Compression.ZipFile": "(,4.3.32767]",
+ "System.IO.FileSystem": "(,4.3.32767]",
+ "System.IO.FileSystem.AccessControl": "(,4.4.32767]",
+ "System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
+ "System.IO.FileSystem.Primitives": "(,4.3.32767]",
+ "System.IO.FileSystem.Watcher": "(,4.3.32767]",
+ "System.IO.IsolatedStorage": "(,4.3.32767]",
+ "System.IO.MemoryMappedFiles": "(,4.3.32767]",
+ "System.IO.Packaging": "(,10.0.32767]",
+ "System.IO.Pipelines": "(,10.0.32767]",
+ "System.IO.Pipes": "(,4.3.32767]",
+ "System.IO.Pipes.AccessControl": "(,5.0.32767]",
+ "System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
+ "System.Linq": "(,4.3.32767]",
+ "System.Linq.AsyncEnumerable": "(,10.0.32767]",
+ "System.Linq.Expressions": "(,4.3.32767]",
+ "System.Linq.Parallel": "(,4.3.32767]",
+ "System.Linq.Queryable": "(,4.3.32767]",
+ "System.Memory": "(,5.0.32767]",
+ "System.Net.Http": "(,4.3.32767]",
+ "System.Net.Http.Json": "(,10.0.32767]",
+ "System.Net.NameResolution": "(,4.3.32767]",
+ "System.Net.NetworkInformation": "(,4.3.32767]",
+ "System.Net.Ping": "(,4.3.32767]",
+ "System.Net.Primitives": "(,4.3.32767]",
+ "System.Net.Requests": "(,4.3.32767]",
+ "System.Net.Security": "(,4.3.32767]",
+ "System.Net.ServerSentEvents": "(,10.0.32767]",
+ "System.Net.Sockets": "(,4.3.32767]",
+ "System.Net.WebHeaderCollection": "(,4.3.32767]",
+ "System.Net.WebSockets": "(,4.3.32767]",
+ "System.Net.WebSockets.Client": "(,4.3.32767]",
+ "System.Numerics.Vectors": "(,5.0.32767]",
+ "System.ObjectModel": "(,4.3.32767]",
+ "System.Private.DataContractSerialization": "(,4.3.32767]",
+ "System.Private.Uri": "(,4.3.32767]",
+ "System.Reflection": "(,4.3.32767]",
+ "System.Reflection.DispatchProxy": "(,6.0.32767]",
+ "System.Reflection.Emit": "(,4.7.32767]",
+ "System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
+ "System.Reflection.Emit.Lightweight": "(,4.7.32767]",
+ "System.Reflection.Extensions": "(,4.3.32767]",
+ "System.Reflection.Metadata": "(,10.0.32767]",
+ "System.Reflection.Primitives": "(,4.3.32767]",
+ "System.Reflection.TypeExtensions": "(,4.3.32767]",
+ "System.Resources.Extensions": "(,10.0.32767]",
+ "System.Resources.Reader": "(,4.3.32767]",
+ "System.Resources.ResourceManager": "(,4.3.32767]",
+ "System.Resources.Writer": "(,4.3.32767]",
+ "System.Runtime": "(,4.3.32767]",
+ "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
+ "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
+ "System.Runtime.Extensions": "(,4.3.32767]",
+ "System.Runtime.Handles": "(,4.3.32767]",
+ "System.Runtime.InteropServices": "(,4.3.32767]",
+ "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
+ "System.Runtime.Loader": "(,4.3.32767]",
+ "System.Runtime.Numerics": "(,4.3.32767]",
+ "System.Runtime.Serialization.Formatters": "(,4.3.32767]",
+ "System.Runtime.Serialization.Json": "(,4.3.32767]",
+ "System.Runtime.Serialization.Primitives": "(,4.3.32767]",
+ "System.Runtime.Serialization.Xml": "(,4.3.32767]",
+ "System.Security.AccessControl": "(,6.0.32767]",
+ "System.Security.Claims": "(,4.3.32767]",
+ "System.Security.Cryptography.Algorithms": "(,4.3.32767]",
+ "System.Security.Cryptography.Cng": "(,5.0.32767]",
+ "System.Security.Cryptography.Csp": "(,4.3.32767]",
+ "System.Security.Cryptography.Encoding": "(,4.3.32767]",
+ "System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
+ "System.Security.Cryptography.Pkcs": "(,10.0.32767]",
+ "System.Security.Cryptography.Primitives": "(,4.3.32767]",
+ "System.Security.Cryptography.ProtectedData": "(,10.0.32767]",
+ "System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
+ "System.Security.Cryptography.Xml": "(,10.0.32767]",
+ "System.Security.Permissions": "(,10.0.32767]",
+ "System.Security.Principal": "(,4.3.32767]",
+ "System.Security.Principal.Windows": "(,5.0.32767]",
+ "System.Security.SecureString": "(,4.3.32767]",
+ "System.Text.Encoding": "(,4.3.32767]",
+ "System.Text.Encoding.CodePages": "(,10.0.32767]",
+ "System.Text.Encoding.Extensions": "(,4.3.32767]",
+ "System.Text.Encodings.Web": "(,10.0.32767]",
+ "System.Text.Json": "(,10.0.32767]",
+ "System.Text.RegularExpressions": "(,4.3.32767]",
+ "System.Threading": "(,4.3.32767]",
+ "System.Threading.AccessControl": "(,10.0.32767]",
+ "System.Threading.Channels": "(,10.0.32767]",
+ "System.Threading.Overlapped": "(,4.3.32767]",
+ "System.Threading.Tasks": "(,4.3.32767]",
+ "System.Threading.Tasks.Dataflow": "(,10.0.32767]",
+ "System.Threading.Tasks.Extensions": "(,5.0.32767]",
+ "System.Threading.Tasks.Parallel": "(,4.3.32767]",
+ "System.Threading.Thread": "(,4.3.32767]",
+ "System.Threading.ThreadPool": "(,4.3.32767]",
+ "System.Threading.Timer": "(,4.3.32767]",
+ "System.ValueTuple": "(,4.5.32767]",
+ "System.Windows.Extensions": "(,10.0.32767]",
+ "System.Xml.ReaderWriter": "(,4.3.32767]",
+ "System.Xml.XDocument": "(,4.3.32767]",
+ "System.Xml.XmlDocument": "(,4.3.32767]",
+ "System.Xml.XmlSerializer": "(,4.3.32767]",
+ "System.Xml.XPath": "(,4.3.32767]",
+ "System.Xml.XPath.XDocument": "(,5.0.32767]"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/obj/Vmianqian.csproj.nuget.g.props b/obj/Vmianqian.csproj.nuget.g.props
new file mode 100644
index 0000000..4969686
--- /dev/null
+++ b/obj/Vmianqian.csproj.nuget.g.props
@@ -0,0 +1,16 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ $(UserProfile)\.nuget\packages\
+ C:\Users\Administrator\.nuget\packages\;C:\Softwares\Microsoft Visual Studio\Shared\NuGetPackages
+ PackageReference
+ 7.0.0
+
+
+
+
+
+
\ No newline at end of file
diff --git a/obj/Vmianqian.csproj.nuget.g.targets b/obj/Vmianqian.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/obj/Vmianqian.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/obj/project.assets.json b/obj/project.assets.json
new file mode 100644
index 0000000..8b8d206
--- /dev/null
+++ b/obj/project.assets.json
@@ -0,0 +1,426 @@
+{
+ "version": 3,
+ "targets": {
+ "net10.0-windows7.0": {
+ "AntdUI/2.3.10": {
+ "type": "package",
+ "compile": {
+ "lib/net10.0-windows7.0/AntdUI.dll": {
+ "related": ".xml"
+ }
+ },
+ "runtime": {
+ "lib/net10.0-windows7.0/AntdUI.dll": {
+ "related": ".xml"
+ }
+ },
+ "frameworkReferences": [
+ "Microsoft.WindowsDesktop.App.WindowsForms"
+ ]
+ }
+ }
+ },
+ "libraries": {
+ "AntdUI/2.3.10": {
+ "sha512": "twjNYhVIw08ydcQsBC5c7/59WBXVqba4kulN48ejxUz2i37xJU6ukYqUtxEFhiQtVzmu8cmGYAjZ4HM6BOKZwg==",
+ "type": "package",
+ "path": "antdui/2.3.10",
+ "files": [
+ ".nupkg.metadata",
+ ".signature.p7s",
+ "README.md",
+ "antdui.2.3.10.nupkg.sha512",
+ "antdui.nuspec",
+ "lib/net10.0-windows7.0/AntdUI.dll",
+ "lib/net10.0-windows7.0/AntdUI.xml",
+ "lib/net40/AntdUI.dll",
+ "lib/net40/AntdUI.xml",
+ "lib/net46/AntdUI.dll",
+ "lib/net46/AntdUI.xml",
+ "lib/net48/AntdUI.dll",
+ "lib/net48/AntdUI.xml",
+ "lib/net6.0-windows7.0/AntdUI.dll",
+ "lib/net6.0-windows7.0/AntdUI.xml",
+ "lib/net8.0-windows7.0/AntdUI.dll",
+ "lib/net8.0-windows7.0/AntdUI.xml",
+ "lib/net9.0-windows7.0/AntdUI.dll",
+ "lib/net9.0-windows7.0/AntdUI.xml",
+ "logo.png"
+ ]
+ }
+ },
+ "projectFileDependencyGroups": {
+ "net10.0-windows7.0": [
+ "AntdUI >= 2.3.10"
+ ]
+ },
+ "packageFolders": {
+ "C:\\Users\\Administrator\\.nuget\\packages\\": {},
+ "C:\\Softwares\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj",
+ "projectName": "Vmianqian",
+ "projectPath": "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj",
+ "packagesPath": "C:\\Users\\Administrator\\.nuget\\packages\\",
+ "outputPath": "E:\\Demo\\C\\Vmianqian\\obj\\",
+ "projectStyle": "PackageReference",
+ "fallbackFolders": [
+ "C:\\Softwares\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+ ],
+ "configFilePaths": [
+ "C:\\Users\\Administrator\\AppData\\Roaming\\NuGet\\NuGet.Config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+ "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+ ],
+ "originalTargetFrameworks": [
+ "net10.0-windows"
+ ],
+ "sources": {
+ "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+ "C:\\Program Files\\dotnet\\library-packs": {},
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net10.0-windows7.0": {
+ "targetAlias": "net10.0-windows",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ },
+ "restoreAuditProperties": {
+ "enableAudit": "true",
+ "auditLevel": "low",
+ "auditMode": "all"
+ },
+ "SdkAnalysisLevel": "10.0.200"
+ },
+ "frameworks": {
+ "net10.0-windows7.0": {
+ "targetAlias": "net10.0-windows",
+ "dependencies": {
+ "AntdUI": {
+ "target": "Package",
+ "version": "[2.3.10, )"
+ }
+ },
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ },
+ "Microsoft.WindowsDesktop.App.WindowsForms": {
+ "privateAssets": "none"
+ }
+ },
+ "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.202/PortableRuntimeIdentifierGraph.json",
+ "packagesToPrune": {
+ "Microsoft.CSharp": "(,4.7.32767]",
+ "Microsoft.VisualBasic": "(,10.4.32767]",
+ "Microsoft.Win32.Primitives": "(,4.3.32767]",
+ "Microsoft.Win32.Registry": "(,5.0.32767]",
+ "Microsoft.Win32.Registry.AccessControl": "(,10.0.32767]",
+ "Microsoft.Win32.SystemEvents": "(,10.0.32767]",
+ "runtime.any.System.Collections": "(,4.3.32767]",
+ "runtime.any.System.Diagnostics.Tools": "(,4.3.32767]",
+ "runtime.any.System.Diagnostics.Tracing": "(,4.3.32767]",
+ "runtime.any.System.Globalization": "(,4.3.32767]",
+ "runtime.any.System.Globalization.Calendars": "(,4.3.32767]",
+ "runtime.any.System.IO": "(,4.3.32767]",
+ "runtime.any.System.Reflection": "(,4.3.32767]",
+ "runtime.any.System.Reflection.Extensions": "(,4.3.32767]",
+ "runtime.any.System.Reflection.Primitives": "(,4.3.32767]",
+ "runtime.any.System.Resources.ResourceManager": "(,4.3.32767]",
+ "runtime.any.System.Runtime": "(,4.3.32767]",
+ "runtime.any.System.Runtime.Handles": "(,4.3.32767]",
+ "runtime.any.System.Runtime.InteropServices": "(,4.3.32767]",
+ "runtime.any.System.Text.Encoding": "(,4.3.32767]",
+ "runtime.any.System.Text.Encoding.Extensions": "(,4.3.32767]",
+ "runtime.any.System.Threading.Tasks": "(,4.3.32767]",
+ "runtime.any.System.Threading.Timer": "(,4.3.32767]",
+ "runtime.aot.System.Collections": "(,4.3.32767]",
+ "runtime.aot.System.Diagnostics.Tools": "(,4.3.32767]",
+ "runtime.aot.System.Diagnostics.Tracing": "(,4.3.32767]",
+ "runtime.aot.System.Globalization": "(,4.3.32767]",
+ "runtime.aot.System.Globalization.Calendars": "(,4.3.32767]",
+ "runtime.aot.System.IO": "(,4.3.32767]",
+ "runtime.aot.System.Reflection": "(,4.3.32767]",
+ "runtime.aot.System.Reflection.Extensions": "(,4.3.32767]",
+ "runtime.aot.System.Reflection.Primitives": "(,4.3.32767]",
+ "runtime.aot.System.Resources.ResourceManager": "(,4.3.32767]",
+ "runtime.aot.System.Runtime": "(,4.3.32767]",
+ "runtime.aot.System.Runtime.Handles": "(,4.3.32767]",
+ "runtime.aot.System.Runtime.InteropServices": "(,4.3.32767]",
+ "runtime.aot.System.Text.Encoding": "(,4.3.32767]",
+ "runtime.aot.System.Text.Encoding.Extensions": "(,4.3.32767]",
+ "runtime.aot.System.Threading.Tasks": "(,4.3.32767]",
+ "runtime.aot.System.Threading.Timer": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.debian.9-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.27-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.fedora.28-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.opensuse.42.3-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "(,4.3.32767]",
+ "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography": "(,4.3.32767]",
+ "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Http": "(,4.3.32767]",
+ "runtime.ubuntu.18.04-x64.runtime.native.System.Net.Security": "(,4.3.32767]",
+ "runtime.unix.Microsoft.Win32.Primitives": "(,4.3.32767]",
+ "runtime.unix.System.Console": "(,4.3.32767]",
+ "runtime.unix.System.Diagnostics.Debug": "(,4.3.32767]",
+ "runtime.unix.System.IO.FileSystem": "(,4.3.32767]",
+ "runtime.unix.System.Net.Primitives": "(,4.3.32767]",
+ "runtime.unix.System.Net.Sockets": "(,4.3.32767]",
+ "runtime.unix.System.Private.Uri": "(,4.3.32767]",
+ "runtime.unix.System.Runtime.Extensions": "(,4.3.32767]",
+ "runtime.win.Microsoft.Win32.Primitives": "(,4.3.32767]",
+ "runtime.win.System.Console": "(,4.3.32767]",
+ "runtime.win.System.Diagnostics.Debug": "(,4.3.32767]",
+ "runtime.win.System.IO.FileSystem": "(,4.3.32767]",
+ "runtime.win.System.Net.Primitives": "(,4.3.32767]",
+ "runtime.win.System.Net.Sockets": "(,4.3.32767]",
+ "runtime.win.System.Runtime.Extensions": "(,4.3.32767]",
+ "runtime.win10-arm-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
+ "runtime.win10-arm64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.win10-x64-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
+ "runtime.win10-x86-aot.runtime.native.System.IO.Compression": "(,4.0.32767]",
+ "runtime.win7-x64.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.win7-x86.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "runtime.win7.System.Private.Uri": "(,4.3.32767]",
+ "runtime.win8-arm.runtime.native.System.IO.Compression": "(,4.3.32767]",
+ "System.AppContext": "(,4.3.32767]",
+ "System.Buffers": "(,5.0.32767]",
+ "System.CodeDom": "(,10.0.32767]",
+ "System.Collections": "(,4.3.32767]",
+ "System.Collections.Concurrent": "(,4.3.32767]",
+ "System.Collections.Immutable": "(,10.0.32767]",
+ "System.Collections.NonGeneric": "(,4.3.32767]",
+ "System.Collections.Specialized": "(,4.3.32767]",
+ "System.ComponentModel": "(,4.3.32767]",
+ "System.ComponentModel.Annotations": "(,4.3.32767]",
+ "System.ComponentModel.EventBasedAsync": "(,4.3.32767]",
+ "System.ComponentModel.Primitives": "(,4.3.32767]",
+ "System.ComponentModel.TypeConverter": "(,4.3.32767]",
+ "System.Configuration.ConfigurationManager": "(,10.0.32767]",
+ "System.Console": "(,4.3.32767]",
+ "System.Data.Common": "(,4.3.32767]",
+ "System.Data.DataSetExtensions": "(,4.4.32767]",
+ "System.Diagnostics.Contracts": "(,4.3.32767]",
+ "System.Diagnostics.Debug": "(,4.3.32767]",
+ "System.Diagnostics.DiagnosticSource": "(,10.0.32767]",
+ "System.Diagnostics.EventLog": "(,10.0.32767]",
+ "System.Diagnostics.FileVersionInfo": "(,4.3.32767]",
+ "System.Diagnostics.PerformanceCounter": "(,10.0.32767]",
+ "System.Diagnostics.Process": "(,4.3.32767]",
+ "System.Diagnostics.StackTrace": "(,4.3.32767]",
+ "System.Diagnostics.TextWriterTraceListener": "(,4.3.32767]",
+ "System.Diagnostics.Tools": "(,4.3.32767]",
+ "System.Diagnostics.TraceSource": "(,4.3.32767]",
+ "System.Diagnostics.Tracing": "(,4.3.32767]",
+ "System.DirectoryServices": "(,10.0.32767]",
+ "System.Drawing.Common": "(,10.0.32767]",
+ "System.Drawing.Primitives": "(,4.3.32767]",
+ "System.Dynamic.Runtime": "(,4.3.32767]",
+ "System.Formats.Asn1": "(,10.0.32767]",
+ "System.Formats.Nrbf": "(,10.0.32767]",
+ "System.Formats.Tar": "(,10.0.32767]",
+ "System.Globalization": "(,4.3.32767]",
+ "System.Globalization.Calendars": "(,4.3.32767]",
+ "System.Globalization.Extensions": "(,4.3.32767]",
+ "System.IO": "(,4.3.32767]",
+ "System.IO.Compression": "(,4.3.32767]",
+ "System.IO.Compression.ZipFile": "(,4.3.32767]",
+ "System.IO.FileSystem": "(,4.3.32767]",
+ "System.IO.FileSystem.AccessControl": "(,4.4.32767]",
+ "System.IO.FileSystem.DriveInfo": "(,4.3.32767]",
+ "System.IO.FileSystem.Primitives": "(,4.3.32767]",
+ "System.IO.FileSystem.Watcher": "(,4.3.32767]",
+ "System.IO.IsolatedStorage": "(,4.3.32767]",
+ "System.IO.MemoryMappedFiles": "(,4.3.32767]",
+ "System.IO.Packaging": "(,10.0.32767]",
+ "System.IO.Pipelines": "(,10.0.32767]",
+ "System.IO.Pipes": "(,4.3.32767]",
+ "System.IO.Pipes.AccessControl": "(,5.0.32767]",
+ "System.IO.UnmanagedMemoryStream": "(,4.3.32767]",
+ "System.Linq": "(,4.3.32767]",
+ "System.Linq.AsyncEnumerable": "(,10.0.32767]",
+ "System.Linq.Expressions": "(,4.3.32767]",
+ "System.Linq.Parallel": "(,4.3.32767]",
+ "System.Linq.Queryable": "(,4.3.32767]",
+ "System.Memory": "(,5.0.32767]",
+ "System.Net.Http": "(,4.3.32767]",
+ "System.Net.Http.Json": "(,10.0.32767]",
+ "System.Net.NameResolution": "(,4.3.32767]",
+ "System.Net.NetworkInformation": "(,4.3.32767]",
+ "System.Net.Ping": "(,4.3.32767]",
+ "System.Net.Primitives": "(,4.3.32767]",
+ "System.Net.Requests": "(,4.3.32767]",
+ "System.Net.Security": "(,4.3.32767]",
+ "System.Net.ServerSentEvents": "(,10.0.32767]",
+ "System.Net.Sockets": "(,4.3.32767]",
+ "System.Net.WebHeaderCollection": "(,4.3.32767]",
+ "System.Net.WebSockets": "(,4.3.32767]",
+ "System.Net.WebSockets.Client": "(,4.3.32767]",
+ "System.Numerics.Vectors": "(,5.0.32767]",
+ "System.ObjectModel": "(,4.3.32767]",
+ "System.Private.DataContractSerialization": "(,4.3.32767]",
+ "System.Private.Uri": "(,4.3.32767]",
+ "System.Reflection": "(,4.3.32767]",
+ "System.Reflection.DispatchProxy": "(,6.0.32767]",
+ "System.Reflection.Emit": "(,4.7.32767]",
+ "System.Reflection.Emit.ILGeneration": "(,4.7.32767]",
+ "System.Reflection.Emit.Lightweight": "(,4.7.32767]",
+ "System.Reflection.Extensions": "(,4.3.32767]",
+ "System.Reflection.Metadata": "(,10.0.32767]",
+ "System.Reflection.Primitives": "(,4.3.32767]",
+ "System.Reflection.TypeExtensions": "(,4.3.32767]",
+ "System.Resources.Extensions": "(,10.0.32767]",
+ "System.Resources.Reader": "(,4.3.32767]",
+ "System.Resources.ResourceManager": "(,4.3.32767]",
+ "System.Resources.Writer": "(,4.3.32767]",
+ "System.Runtime": "(,4.3.32767]",
+ "System.Runtime.CompilerServices.Unsafe": "(,7.0.32767]",
+ "System.Runtime.CompilerServices.VisualC": "(,4.3.32767]",
+ "System.Runtime.Extensions": "(,4.3.32767]",
+ "System.Runtime.Handles": "(,4.3.32767]",
+ "System.Runtime.InteropServices": "(,4.3.32767]",
+ "System.Runtime.InteropServices.RuntimeInformation": "(,4.3.32767]",
+ "System.Runtime.Loader": "(,4.3.32767]",
+ "System.Runtime.Numerics": "(,4.3.32767]",
+ "System.Runtime.Serialization.Formatters": "(,4.3.32767]",
+ "System.Runtime.Serialization.Json": "(,4.3.32767]",
+ "System.Runtime.Serialization.Primitives": "(,4.3.32767]",
+ "System.Runtime.Serialization.Xml": "(,4.3.32767]",
+ "System.Security.AccessControl": "(,6.0.32767]",
+ "System.Security.Claims": "(,4.3.32767]",
+ "System.Security.Cryptography.Algorithms": "(,4.3.32767]",
+ "System.Security.Cryptography.Cng": "(,5.0.32767]",
+ "System.Security.Cryptography.Csp": "(,4.3.32767]",
+ "System.Security.Cryptography.Encoding": "(,4.3.32767]",
+ "System.Security.Cryptography.OpenSsl": "(,5.0.32767]",
+ "System.Security.Cryptography.Pkcs": "(,10.0.32767]",
+ "System.Security.Cryptography.Primitives": "(,4.3.32767]",
+ "System.Security.Cryptography.ProtectedData": "(,10.0.32767]",
+ "System.Security.Cryptography.X509Certificates": "(,4.3.32767]",
+ "System.Security.Cryptography.Xml": "(,10.0.32767]",
+ "System.Security.Permissions": "(,10.0.32767]",
+ "System.Security.Principal": "(,4.3.32767]",
+ "System.Security.Principal.Windows": "(,5.0.32767]",
+ "System.Security.SecureString": "(,4.3.32767]",
+ "System.Text.Encoding": "(,4.3.32767]",
+ "System.Text.Encoding.CodePages": "(,10.0.32767]",
+ "System.Text.Encoding.Extensions": "(,4.3.32767]",
+ "System.Text.Encodings.Web": "(,10.0.32767]",
+ "System.Text.Json": "(,10.0.32767]",
+ "System.Text.RegularExpressions": "(,4.3.32767]",
+ "System.Threading": "(,4.3.32767]",
+ "System.Threading.AccessControl": "(,10.0.32767]",
+ "System.Threading.Channels": "(,10.0.32767]",
+ "System.Threading.Overlapped": "(,4.3.32767]",
+ "System.Threading.Tasks": "(,4.3.32767]",
+ "System.Threading.Tasks.Dataflow": "(,10.0.32767]",
+ "System.Threading.Tasks.Extensions": "(,5.0.32767]",
+ "System.Threading.Tasks.Parallel": "(,4.3.32767]",
+ "System.Threading.Thread": "(,4.3.32767]",
+ "System.Threading.ThreadPool": "(,4.3.32767]",
+ "System.Threading.Timer": "(,4.3.32767]",
+ "System.ValueTuple": "(,4.5.32767]",
+ "System.Windows.Extensions": "(,10.0.32767]",
+ "System.Xml.ReaderWriter": "(,4.3.32767]",
+ "System.Xml.XDocument": "(,4.3.32767]",
+ "System.Xml.XmlDocument": "(,4.3.32767]",
+ "System.Xml.XmlSerializer": "(,4.3.32767]",
+ "System.Xml.XPath": "(,4.3.32767]",
+ "System.Xml.XPath.XDocument": "(,5.0.32767]"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/obj/project.nuget.cache b/obj/project.nuget.cache
new file mode 100644
index 0000000..1059d1c
--- /dev/null
+++ b/obj/project.nuget.cache
@@ -0,0 +1,10 @@
+{
+ "version": 2,
+ "dgSpecHash": "qbBH41KABjc=",
+ "success": true,
+ "projectFilePath": "E:\\Demo\\C\\Vmianqian\\Vmianqian.csproj",
+ "expectedPackageFiles": [
+ "C:\\Users\\Administrator\\.nuget\\packages\\antdui\\2.3.10\\antdui.2.3.10.nupkg.sha512"
+ ],
+ "logs": []
+}
\ No newline at end of file