From 2f0ee710935bf2c9774c5aabbcf58a9bb2c30ef3 Mon Sep 17 00:00:00 2001 From: dqb-dev Date: Fri, 2 Oct 2026 01:43:45 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E4=BD=93=E7=B3=BB?= =?UTF-8?q?=E8=90=BD=E5=9C=B0:AssemblyInfo=20=E5=9B=BA=E5=AE=9A=E4=B8=89?= =?UTF-8?q?=E6=AE=B5=E5=BC=8F=201.0.3=20=E4=B8=BA=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E4=BA=8B=E5=AE=9E=E6=BA=90(=E7=A6=81=E7=94=A8=201.0.*=20?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8F=B7);=E5=85=B3=E4=BA=8E=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E8=BF=90=E8=A1=8C=E6=97=B6=E8=AF=BB=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E9=9B=86=E7=89=88=E6=9C=AC;setup.iss=20=E5=B8=A6=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=E5=B9=B6=E7=BA=B3=E5=85=A5=20git;=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20tools\=E9=80=92=E5=A2=9E=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?.ps1=20=E4=B8=80=E9=94=AE=E9=80=92=E5=A2=9E=E4=B8=89=E5=A4=84?= =?UTF-8?q?=E5=90=8C=E6=AD=A5(=E5=B7=B2=E8=87=AA=E6=B5=8B=E5=BE=80?= =?UTF-8?q?=E8=BF=94);=E6=8A=80=E8=83=BD=E5=86=99=E5=85=A5=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7=E9=93=81=E5=BE=8B(=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E5=8F=91=E7=89=88=E5=BF=85=E9=A1=BB=E9=80=92=E5=A2=9E)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../skills/sd-enhanced-components/SKILL.md | 6 ++ .gitignore | 4 ++ tools/递增版本号.ps1 | 58 +++++++++++++++++++ 成套报价软件/Properties/AssemblyInfo.cs | 12 ++-- 成套报价软件/shezhi/关于软件.cs | 6 +- 5 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 tools/递增版本号.ps1 diff --git a/.agents/skills/sd-enhanced-components/SKILL.md b/.agents/skills/sd-enhanced-components/SKILL.md index d2a29f1..e8052c9 100644 --- a/.agents/skills/sd-enhanced-components/SKILL.md +++ b/.agents/skills/sd-enhanced-components/SKILL.md @@ -59,6 +59,12 @@ description: SharpDevelop 5.x WinForms 设计器**全部工具箱**(5 分类 8 - **依赖清单**:所需引用的资源文件(图标/图片/resx)、组件库与依赖程序集(Designer.cs 用到增强控件时,同一次改动先写 csproj 引用,见第 3 条); - **数据接口**:窗口与其他系统模块(主窗口/数据库/停靠布局/外部进程)的数据交互方式与调用入口。 窗口一律采用双文件结构:`窗口名.Designer.cs`(纯布局与属性,SD 设计器能正确打开并继续编辑微调)+ `窗口名.cs`(交互逻辑与业务代码),Designer.cs 里绝不写业务代码;窗口文件记得同步注册进 csproj(Compile Include + Designer.cs 加 ``)。 +7. **版本号铁律(用户强制 2026-10-01):每次发版必须递增版本号**。每次打安装包/发 Gitea Release 前,必须先跑 `tools\递增版本号.ps1`(默认修订号 +1,如 1.0.3→1.0.4;大改动可传参指定如 1.1.0)。规则: + - **唯一事实源** = `成套报价软件\Properties\AssemblyInfo.cs` 的 `AssemblyVersion`(固定三段式 `主.次.修订.0`,**禁用 `1.0.*` 自动号**——每次编译都变,无法对应发布的安装包); + - 「关于软件」窗口运行时自动读程序集版本显示(不在 Designer 写死); + - `release\成套报价软件\setup.iss` 的 `AppVersion` 与 `OutputBaseFilename=成套报价软件_Setup_版本` 由脚本同步; + - Gitea Release 的 tag 与版本号一致(如 `v1.0.4`); + - 发版链固定为:递增版本号 → 编译 → make_package → ISCC → 更新包 → git 提交推送 → Release。跳过递增 = 两个不同功能的安装包同版本号,用户分不清、回滚排障全乱。 ## 一、项目前提(缺一不可) diff --git a/.gitignore b/.gitignore index ae736d0..eab5551 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,7 @@ selftest_result.txt !成套报价软件/lib/*.dll # 例外:tools\ 下的 WebView2 引导程序是打包必需件 !tools/MicrosoftEdgeWebview2Setup.exe +# 例外:release 里的 Inno Setup 脚本是手工维护的打包正本,必须进版本控制 +!release/ +release/* +!release/成套报价软件/setup.iss diff --git a/tools/递增版本号.ps1 b/tools/递增版本号.ps1 new file mode 100644 index 0000000..b98a8ca --- /dev/null +++ b/tools/递增版本号.ps1 @@ -0,0 +1,58 @@ +# ============================================================ +# 递增版本号.ps1 —— 版本号一键递增并三处同步 +# ============================================================ +# 唯一事实源: 成套报价软件\Properties\AssemblyInfo.cs 的 AssemblyVersion +# 同步点: ① AssemblyInfo.cs (AssemblyVersion + AssemblyFileVersion) +# ② release\成套报价软件\setup.iss (AppVersion + OutputBaseFilename) +# 关于软件窗口自动读程序集版本,无需同步。 +# 用法: +# powershell -File tools\递增版本号.ps1 # 修订号 +1 (1.0.3 → 1.0.4) +# powershell -File tools\递增版本号.ps1 1.1.0 # 直接指定版本 +# 发版流程: 本脚本 → 编译 → make_package → ISCC → 更新包 → git 提交推送 +# → Gitea Release(tag 与版本号一致,如 v1.0.4) +# ============================================================ +param([string]$SetVersion = "") + +$ErrorActionPreference = 'Stop' +$root = Split-Path -Parent $PSScriptRoot +$asm = Join-Path $root '成套报价软件\Properties\AssemblyInfo.cs' +$iss = Join-Path $root 'release\成套报价软件\setup.iss' + +# --- 读当前版本 --- +$asmText = [System.IO.File]::ReadAllText($asm) +if ($asmText -notmatch 'AssemblyVersion\("(\d+)\.(\d+)\.(\d+)') { + Write-Host "[FAIL] AssemblyInfo.cs 里没找到三段式 AssemblyVersion" -ForegroundColor Red; exit 1 +} +$cur = "{0}.{1}.{2}" -f $Matches[1], $Matches[2], $Matches[3] + +# --- 算新版本 --- +if ($SetVersion -eq "") { + $new = "{0}.{1}.{2}" -f $Matches[1], $Matches[2], ([int]$Matches[3] + 1) +} else { + if ($SetVersion -notmatch '^\d+\.\d+\.\d+$') { + Write-Host "[FAIL] 版本号格式须为 主.次.修订,如 1.1.0" -ForegroundColor Red; exit 1 + } + $new = $SetVersion +} + +# --- ① AssemblyInfo: AssemblyVersion + AssemblyFileVersion --- +$asmText = $asmText -replace 'AssemblyVersion\("\d+\.\d+\.\d+[\.\d]*"\)', "AssemblyVersion(`"$new.0`")" +$asmText = $asmText -replace 'AssemblyFileVersion\("\d+\.\d+\.\d+[\.\d]*"\)', "AssemblyFileVersion(`"$new.0`")" +[System.IO.File]::WriteAllText($asm, $asmText, (New-Object System.Text.UTF8Encoding $true)) +Write-Host "[OK] AssemblyInfo.cs: $cur -> $new" + +# --- ② setup.iss: AppVersion + OutputBaseFilename --- +$issText = [System.IO.File]::ReadAllText($iss) +$issText = $issText -replace 'AppVersion=\d+\.\d+\.\d+', "AppVersion=$new" +$issText = $issText -replace 'OutputBaseFilename=成套报价软件_Setup[_\d\.]*', "OutputBaseFilename=成套报价软件_Setup_$new" +[System.IO.File]::WriteAllText($iss, $issText, (New-Object System.Text.UTF8Encoding $true)) +Write-Host "[OK] setup.iss: AppVersion=$new, 安装包名=成套报价软件_Setup_$new.exe" + +Write-Host "" +Write-Host "版本号已递增至 $new。后续步骤:" +Write-Host " 1. 编译主项目(csc @tools\verify_build.rsp)" +Write-Host " 2. python tools\make_package.py 组装发布目录" +Write-Host " 3. ISCC 编译安装包(文件名自动带 $new)" +Write-Host " 4. 更新包(make_update_package.py,目录名建议带版本)" +Write-Host " 5. git add+commit+push" +Write-Host " 6. Gitea Release: tag 用 v$new" diff --git a/成套报价软件/Properties/AssemblyInfo.cs b/成套报价软件/Properties/AssemblyInfo.cs index d5bf7ce..3b5fc77 100644 --- a/成套报价软件/Properties/AssemblyInfo.cs +++ b/成套报价软件/Properties/AssemblyInfo.cs @@ -22,10 +22,8 @@ using System.Runtime.InteropServices; // If you need to expose a type to COM, use [ComVisible(true)] on that type. [assembly: ComVisible(false)] -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all the values or you can use the default the Revision and -// Build Numbers by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.*")] +// ★ 版本号唯一事实源(2026-10-01 起):格式 主.次.修订.0——每次发版必须递增修订号, +// 用 tools\递增版本号.ps1 一键同步(关于软件自动读这里;setup.iss 由脚本同步)。 +// 不要用 "1.0.*" 自动号(每次编译都变,无法对应发布的安装包)。 +[assembly: AssemblyVersion("1.0.3.0")] +[assembly: AssemblyFileVersion("1.0.3.0")] diff --git a/成套报价软件/shezhi/关于软件.cs b/成套报价软件/shezhi/关于软件.cs index bf07f1f..f057c16 100644 --- a/成套报价软件/shezhi/关于软件.cs +++ b/成套报价软件/shezhi/关于软件.cs @@ -1,4 +1,4 @@ -// 关于软件:经典关于页模板(页头 图标/名称/版本/简介 + 选项卡 功能介绍|开源致谢 + 底部版权栏) +// 关于软件:经典关于页模板(页头 图标/名称/版本/简介 + 选项卡 功能介绍|开源致谢 + 底部版权栏) // 富文本用 SelectionColor/Font 逐段设置(■ 小节标题深蓝加粗、协议名按协议配色,纯 WinForms 无新依赖) using System; using System.Drawing; @@ -16,6 +16,10 @@ namespace 成套报价软件 // 页头排版在 Load 里做(AutoScale 完成后):版本号紧随软件名实际宽度、 // 简介对齐软件名左侧,避免高 DPI 下固定坐标互相压字;图标 Zoom 充满框 pic图标.SizeMode = PictureBoxSizeMode.Zoom; + // ★ 版本号从程序集读取(唯一事实源=AssemblyInfo 的 AssemblyVersion,递增后这里自动跟随; + // Designer 里的 v1.0.0 只是设计期占位文本)。显示三段:主.次.修订 + lbl版本.Text = "v" + System.Reflection.Assembly.GetExecutingAssembly() + .GetName().Version.ToString(3); this.Load += (s, e) => { try