Files
henlo_migration_wpf10/RELEASE.md
T

143 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 恒诺迁移工具构建与发版说明
本文是 `henlo_migration_wpf10/` 的构建、Velopack 打包、更新服务器部署和客户端自动更新说明。涉及版本、发布或更新的任务必须先完整读取本文;若本文与实际代码冲突,以 `.csproj`、`pack.bat` 和 `App.xaml.cs` 为准,并同步更新本文。
## 权限边界
- 普通 Debug/Release 构建可以用于本地验证。
- 修改版本号、运行 `pack.bat`、删除或覆盖发布产物、上传更新服务器都属于显式发布动作,必须有用户当前任务的明确授权。
- 打包脚本不会上传任何文件;服务器部署是独立的外部写操作,需要另行授权。
- 不要把“项目构建成功”描述成“发版成功”或“自动更新已验证”。
## 版本来源
- 唯一版本来源是 `henlo_migration_wpf10/henlo_migration_wpf10.csproj` 的 `<Version>`。
- 正式发版前必须把版本号单调递增,不要重新打包已存在的版本号。
- 程序显示版本来自程序集元数据,不在脚本或文档中另设版本常量。
## 日常构建
在仓库根目录执行:
```powershell
dotnet restore .\henlo_migration_wpf10\henlo_migration_wpf10.csproj
dotnet build .\henlo_migration_wpf10\henlo_migration_wpf10.csproj -c Debug
```
依赖已经恢复且不希望访问包源时:
```powershell
dotnet build .\henlo_migration_wpf10\henlo_migration_wpf10.csproj -c Debug --no-restore
```
Debug 产物位于 `henlo_migration_wpf10/bin/Debug/net10.0-windows/`,只用于开发验证,不是 Velopack 发布包。项目现有 `CS8632` 和 `NU1701` 警告不等于构建错误,但不得新增编译错误。
## 正式打包流程
唯一正式入口:
```powershell
cd .\henlo_migration_wpf10
.\pack.bat
```
`pack.bat` 当前执行顺序:
1. 从 `.csproj` 读取 `<Version>`。
2. 删除并重建 `publish/`。
3. 执行:
```powershell
dotnet publish henlo_migration_wpf10.csproj -c Release -o publish --self-contained false -r win-x64
```
4. 删除 `publish/config.ini`,确保本机数据库配置不会进入产物。
5. 确保 `publish/data/`、`publish/data/from/`、`publish/pre/` 存在。
6. 执行:
```powershell
vpk pack -u henlo_migration -v <Version> -p publish -e "恒诺迁移工具.exe" -o releases --noInst
```
7. 保留 `releases/` 中的历史包,供 Velopack 生成差量包;脚本只清理 `publish/`,不会清理 `releases/`。
打包依赖 Windows、对应 .NET SDK、可调用的 `dotnet` 和 `vpk`。不要使用 `_build*`、`_make_pack.bat`、`_write_pack.ps1` 等历史辅助文件作为正式入口。
## 当前发布形态
- 目标平台:Windows x64。
- 发布方式:framework-dependent,`--self-contained false`;目标机器需要匹配的 .NET 10 Desktop Runtime。
- Velopack 参数包含 `--noInst`,因此不生成 Setup 安装器,只生成便携包和更新源文件。
- `Properties/PublishProfiles/FolderProfile.pubxml` 虽配置 `PublishSingleFile=true`,但 `pack.bat` 没有使用该 Profile;正式产物不是单文件,会包含 EXE、DLL 和 runtimeconfig/deps 文件。
## 运行时文件进入发布包的规则
- `.csproj` 只复制 `pre/*.txt|*.fnc|*.prc` 等程序辅助脚本,不复制本机 `config.ini` 或 `data/from/*.txt`;`pack.bat` 还会在打包前再次删除 `publish/config.ini`,并创建空的 `data/from/` 目录。
- `pre/hmig_get_table_bos_31.prc`、`pre/hmig_get_table_bos_field_31.prc` 等运行时辅助过程必须出现在发布输出中。
- 新安装的索引列表为空;程序添加第一条对应配置时会在 `data/from/` 创建 `table.txt`、`bos.txt`、`bos_field.txt`、`prc.txt` 或 `data.txt`。
- 新安装首次运行时会创建值为空的 `config.ini`,由用户在界面配置;不得把真实或样例账号密码放入发布产物。
## Velopack 产物
正常情况下 `releases/` 至少包含:
```text
henlo_migration-win-Portable.zip
henlo_migration-<Version>-full.nupkg
henlo_migration-<Version>-delta.nupkg
RELEASES
releases.win.json
assets.win.json
```
便携 ZIP 内应包含 `.portable`、根启动器、`Update.exe`、`current/` 应用文件以及需要的 `data/`、`pre/` 内容。差量包是否生成取决于 `releases/` 中是否有可用的历史版本。
## 更新服务器部署
客户端更新地址硬编码在 `App.xaml.cs`:
```text
http://zjhenlo.henlo.net:8878/henlo_migration/auto_update/
```
当前没有自动上传脚本。获得上传授权后,应部署并核对:
- 新版本 full nupkg;
- 新版本 delta nupkg(若生成);
- `RELEASES`;
- `releases.win.json`;
- `assets.win.json`;
- 需要提供便携下载时再上传 `henlo_migration-win-Portable.zip`。
上传后至少验证服务器能直接访问元数据文件和其中引用的包,文件大小及版本号与本地产物一致。不要只上传 nupkg 而遗漏更新后的元数据。
## 客户端自动更新流程
`App.xaml.cs` 当前行为:
1. UI 启动前调用 `VelopackApp.Build().Run()`。
2. 从系统临时目录恢复上次更新前备份的 `config.ini`、`data/`、`pre/`。
3. 创建指向更新服务器的 `UpdateManager`;非 Velopack 环境创建失败时禁用自动更新。
4. 后台静默检查并下载更新;手动“检查更新”使用相同更新源。
5. 用户同意立即重启时,先备份 `config.ini`、`data/`、`pre/`,再调用 `ApplyUpdatesAndRestart()`。
6. 新版本首次启动时恢复备份并删除临时备份目录。
当前限制和未验证项:
- 更新备份范围包含 `config.ini`、`data/` 和 `pre/`;恢复失败时会记录到 `error.log`,发版验收仍需验证用户配置未丢失。
- 用户下载完成后选择“不立即重启”时,代码没有明确实现下次启动自动应用已下载更新的流程。
- 直接运行普通 `publish/` 中的 EXE 时通常不属于 Velopack 安装态,程序会禁用更新或把检查异常写入 `error.log`。
- `--noInst` 生成的是便携模式;便携包的检查、下载、应用和重启更新链路尚未完成实际端到端回归,不能声称自动更新可靠可用。
## 发版验收清单
1. 确认工作区改动和准备发布的提交范围,避免把无关或敏感文件带入。
2. 递增并核对 `.csproj` 版本号。
3. 先执行主项目构建,确保 `0` 个错误。
4. 获得明确授权后运行 `pack.bat`,确认 publish 和 vpk 两阶段都成功。
5. 检查便携 ZIP、full/delta 包、`RELEASES` 和两个 JSON 的版本、大小及时间。
6. 检查发布包中的 `pre/` 和必要运行文件,并确认产物中不存在 `config.ini` 及开发机 `data/from/*.txt`。
7. 在未安装态测试普通 EXE/便携包启动;若任务涉及自动更新,再在对应 Velopack 运行形态下单独验证更新。
8. 只有获得上传授权后才能部署服务器;上传后验证 URL 和包完整性。
9. 交付说明必须区分:构建验证、打包验证、便携运行验证、自动更新验证和服务器部署验证。