feat: v1.2.0 开发进度更新
### 新增功能 - **Linux 官方支持**:新增 Hua.Todo.Avalonia 项目,正式适配 Linux 平台,同时支持 Windows 和 macOS - **Avalonia 桌面交互**:增加托盘菜单(显示/退出)、关闭隐藏到托盘、Windows 全局热键唤起主窗口、热键配置本地持久化 - **SQLite DateTime 兼容修复**:新增 LenientUtcDateTimeStringConverter,解决历史遗留的 DateTime 脏数据解析问题 - **用户文档完善**:新增 docs/manual/新手指南.md 和 docs/manual/用户指南.md - **部署文档**:新增 docs/manual/部署文档.md,详细说明多平台发布流程 ### 优化与修复 - **发布脚本整理**:拆分/对齐各平台发布入口,新增 publish.ps1 作为统一入口 - **Windows WebView2 优化**:数据目录调整到 %LocalAppData%\Hua.Todo\WebView2,修复 Runtime 误判问题 - **MAUI 多平台构建**:在 Windows 开发机上默认仅构建 Android + Windows 目标 - **SPA 路由回落**:修复 Release 模式下 /swagger 路径的 404 问题 - **Swagger 输出**:补齐 Dynamic API 端点,避免接口缺失 ### 文档更新 - **版本记录**:更新 v1.2.0 开发进度和功能列表 - **技术设计文档**:添加 Avalonia 项目架构和模块设计 - **项目结构**:更新 README.md 中的项目结构说明 ### 其他变更 - 新增 Directory.Build.props 和更新 Directory.Build.targets - 调整 src/Hua.Todo.Avalonia 项目配置和资源文件 - 更新 src/Hua.Todo.Web 前端资源文件 - 修复 src/Hua.Todo.Maui 相关配置和打包脚本
This commit is contained in:
+57
-8
@@ -8,7 +8,7 @@
|
||||
### 2.1 后端技术栈
|
||||
- **开发语言**: C# 10
|
||||
- **框架**: .NET 10
|
||||
- **UI 框架**: MAUI (Multi-platform App UI)
|
||||
- **UI 框架**: MAUI (Multi-platform App UI) + Avalonia (Linux 支持)
|
||||
- **Web 服务器**: Kestrel (ASP.NET Core 内置)
|
||||
- **API 框架**: ASP.NET Core Web API
|
||||
- **数据访问**: Entity Framework Core
|
||||
@@ -34,7 +34,8 @@ Hua.Todo/
|
||||
│ │ ├── 技术栈与模块.md
|
||||
│ │ ├── 版本记录.md
|
||||
│ │ ├── 技术设计文档.md(本文件)
|
||||
│ │ └── 代码规范文档.md
|
||||
│ │ ├── 代码规范文档.md
|
||||
│ │ └── 部署文档.md
|
||||
│ └── project/ # 项目进度/需求文档
|
||||
│ ├── 产品需求文档.md
|
||||
│ └── ...
|
||||
@@ -73,7 +74,30 @@ Hua.Todo/
|
||||
│ │ ├── MauiProgram.cs # MAUI 程序配置
|
||||
│ │ └── Hua.Todo.Maui.csproj # MAUI 项目文件
|
||||
│ │
|
||||
│ ├── Hua.Todo.Api/ # 后端 API 项目
|
||||
│ ├── Hua.Todo.Avalonia/ # Avalonia 项目(Linux 支持)
|
||||
│ │ ├── Assets/ # 资源文件
|
||||
│ │ │ └── icon.ico # 应用图标
|
||||
│ │ ├── Services/ # 服务层
|
||||
│ │ │ ├── EmbeddedWebServerServiceFactory.cs
|
||||
│ │ │ ├── GlobalHotKeyServiceFactory.cs
|
||||
│ │ │ ├── NoopEmbeddedWebServerService.cs
|
||||
│ │ │ └── Platforms/ # 平台特定服务
|
||||
│ │ │ ├── AndroidGlobalHotKeyService.cs
|
||||
│ │ │ └── LinuxGlobalHotKeyService.cs
|
||||
│ │ ├── Views/ # 视图
|
||||
│ │ │ ├── MainView.axaml
|
||||
│ │ │ ├── MainView.axaml.cs
|
||||
│ │ │ ├── MainWindow.axaml
|
||||
│ │ │ └── MainWindow.axaml.cs
|
||||
│ │ ├── App.axaml # Avalonia 应用入口
|
||||
│ │ ├── App.axaml.cs
|
||||
│ │ ├── Program.cs # Avalonia 程序配置
|
||||
│ │ ├── appsettings.json # 配置文件
|
||||
│ │ ├── setup.iss # 安装脚本
|
||||
│ │ ├── wwwroot/ # 前端静态资源
|
||||
│ │ └── Hua.Todo.Avalonia.csproj # Avalonia 项目文件
|
||||
│ │
|
||||
│ ├── Hua.Todo.Host/ # 后端 API 项目
|
||||
│ │ ├── Controllers/ # API 控制器
|
||||
│ │ │ ├── TasksController.cs
|
||||
│ │ │ ├── SettingsController.cs
|
||||
@@ -89,6 +113,8 @@ Hua.Todo/
|
||||
│ │ │ └── SyncService.cs
|
||||
│ │ ├── Data/ # 数据访问层
|
||||
│ │ │ ├── TodoDbContext.cs
|
||||
│ │ │ ├── Converters/ # 类型转换器
|
||||
│ │ │ │ └── LenientUtcDateTimeStringConverter.cs
|
||||
│ │ │ ├── Repositories/
|
||||
│ │ │ │ ├── ITaskRepository.cs
|
||||
│ │ │ │ └── TaskRepository.cs
|
||||
@@ -99,7 +125,14 @@ Hua.Todo/
|
||||
│ │ │ └── ServiceCollectionExtensions.cs
|
||||
│ │ ├── Program.cs # API 入口
|
||||
│ │ ├── appsettings.json # 配置文件
|
||||
│ │ └── Hua.Todo.Api.csproj # API 项目文件
|
||||
│ │ └── Hua.Todo.Host.csproj # Host 项目文件
|
||||
│ │
|
||||
│ ├── Hua.Todo.Application/ # 应用层
|
||||
│ │ ├── Data/ # 数据访问
|
||||
│ │ │ ├── TodoDbContext.cs
|
||||
│ │ │ └── Converters/ # 类型转换器
|
||||
│ │ │ └── LenientUtcDateTimeStringConverter.cs
|
||||
│ │ └── Hua.Todo.Application.csproj # Application 项目文件
|
||||
│ │
|
||||
│ ├── Hua.Todo.Core/ # 核心业务逻辑层
|
||||
│ │ ├── Entities/ # 实体类
|
||||
@@ -116,7 +149,7 @@ Hua.Todo/
|
||||
│ │
|
||||
│ ├── Hua.Todo.Web/ # 前端 Web 项目 (Vue.js)
|
||||
│ │ ├── public/ # 静态资源
|
||||
│ │ │ └── index.html
|
||||
│ │ │ └── favicon.svg # 网站图标
|
||||
│ │ ├── src/ # 源代码
|
||||
│ │ │ ├── api/ # API 调用
|
||||
│ │ │ │ ├── client.ts # HTTP 客户端配置
|
||||
@@ -182,7 +215,23 @@ Hua.Todo/
|
||||
- `WebViewContainer`: 封装 WebView 控件
|
||||
- 平台特定服务: 快捷键、通知等
|
||||
|
||||
### 4.2 后端 API 项目 (Hua.Todo.Host)
|
||||
### 4.2 Avalonia 项目 (Hua.Todo.Avalonia)
|
||||
**职责**:
|
||||
- Linux 平台支持
|
||||
- 桌面交互功能(托盘菜单、全局热键等)
|
||||
- WebView 容器管理
|
||||
- 本地 HTTP 服务器启动
|
||||
|
||||
**关键组件**:
|
||||
- `Program.cs`: 配置 Avalonia 应用和依赖注入
|
||||
- `App.axaml.cs`: 应用程序主入口
|
||||
- `MainWindow.axaml.cs`: 主窗口管理
|
||||
- `MainView.axaml.cs`: 主视图管理
|
||||
- `GlobalHotKeyServiceFactory`: 全局热键服务工厂
|
||||
- `EmbeddedWebServerServiceFactory`: 内嵌 Web 服务器服务工厂
|
||||
- 平台特定服务: Linux 全局热键等
|
||||
|
||||
### 4.3 后端 API 项目 (Hua.Todo.Host)
|
||||
**职责**:
|
||||
- 提供 RESTful API 接口
|
||||
- 业务逻辑处理
|
||||
@@ -198,7 +247,7 @@ Hua.Todo/
|
||||
- `Data`: 数据访问层和数据库上下文
|
||||
- `Program.cs`: API 服务器配置和启动
|
||||
|
||||
### 4.3 核心业务层 (Hua.Todo.Core)
|
||||
### 4.4 核心业务层 (Hua.Todo.Core)
|
||||
**职责**:
|
||||
- 定义领域模型和业务规则
|
||||
- 提供核心业务接口
|
||||
@@ -210,7 +259,7 @@ Hua.Todo/
|
||||
- `ValueObjects`: 值对象
|
||||
- `Specifications`: 业务规范
|
||||
|
||||
### 4.4 前端 Web 项目 (Hua.Todo.Web)
|
||||
### 4.5 前端 Web 项目 (Hua.Todo.Web)
|
||||
**职责**:
|
||||
- 用户界面展示
|
||||
- 用户交互处理
|
||||
|
||||
+7
-3
@@ -11,10 +11,13 @@
|
||||
|
||||
### v1.2.0(开发中,2026-04-07)
|
||||
|
||||
- **Linux 官方支持**:新增 `Hua.Todo.Avalonia` 项目,正式适配 Linux 平台,同时支持 Windows 和 macOS。
|
||||
- **Avalonia 桌面交互**:增加托盘菜单(显示/退出)、关闭隐藏到托盘、Windows 全局热键唤起主窗口、热键配置本地持久化;并对齐 Avalonia 的 appsettings 默认值。
|
||||
- **关键词检索**:主界面增加搜索框,按任务标题实时过滤;采用“命中即显示(含上下文)”策略;支持 Esc 清空;英文大小写不敏感。
|
||||
- **云同步(基础可用)**:新增“云同步设置”弹窗,支持手动配置服务端地址(格式校验 + 保存时可达性/风险提示);登录成功后拉取云端任务并刷新主界面(v1.2.0 为只读展示);401/403 时会自动清会话并弹出登录入口。
|
||||
- **MAUI(Windows)内嵌 API 文档**:Debug 模式下,内嵌 WebServer 默认提供 Swagger UI(`{HostUrl}/swagger`)与 OpenAPI JSON(`{HostUrl}/swagger/v1/swagger.json`),便于本地接口调试。
|
||||
- **Swagger 输出补齐 Dynamic API**:任务管理等 Dynamic API 端点会出现在 `swagger.json` 中,避免“接口缺失”导致联调困难。
|
||||
- **SQLite DateTime 兼容修复**:新增 `LenientUtcDateTimeStringConverter`,本地数据库中若存在历史遗留的 DateTime “ticks/时间戳字符串”脏数据,读取时将被兼容解析,避免 `/api/task` 等查询因单条坏数据整体失败。
|
||||
- **SPA 路由回落行为修复**:当 Release/非 Debug 未启用 Swagger 时,`/swagger` 不再被当作“后端专用路径”排除,访问会按 SPA 路由规则回落到 `/index.html`,避免直接 404。
|
||||
- **MAUI 多平台构建开关**:在 Windows 开发机上默认仅构建 Android + Windows 目标,避免 iOS/MacCatalyst 目标在非 macOS 环境触发运行时包缺失(NETSDK1082);在 macOS 上仍会包含 iOS/MacCatalyst 目标。
|
||||
- **发布脚本整理**:拆分/对齐各平台发布入口,新增 `publish.ps1` 作为统一入口(默认发布 Windows + Linux),Windows 发布脚本支持开关打包与版本自增,发布产物会落盘到 `artifacts/`。
|
||||
@@ -22,9 +25,10 @@
|
||||
- **Windows WebView2 数据目录调整**:MAUI(Unpackaged)默认会在安装目录生成 `Hua.Todo.Maui.exe.WebView2`;现改为写入 `%LocalAppData%\Hua.Todo\WebView2`,避免污染安装目录。
|
||||
- **Windows WebView2 Runtime 误判修复**:当系统已安装 WebView2 Runtime 但发布产物缺少/裁剪 WebView2 托管程序集时,旧检测逻辑会误判为“未安装”;现改为优先从常见安装目录探测 Evergreen 版本,避免阻断主界面加载。
|
||||
- **Windows 三件套开发体验**:新增 `start-host.ps1` / `start-dev.ps1`,并在 MAUI 中约定 `IsUsingStatic=false` 时不启动内置 WebServer,避免注入覆盖 Vite 的 `/api -> 5173` 代理配置。
|
||||
- **Avalonia 桌面交互对齐 MAUI**:增加托盘菜单(显示/退出)、关闭隐藏到托盘、Windows 全局热键唤起主窗口、热键配置本地持久化;并对齐 Avalonia 的 appsettings 默认值。
|
||||
|
||||
### v1.1.1 (2026-04-06)
|
||||
- **文档与部署指南**:新增 `docs/manual/部署文档.md`,详细说明开发环境搭建、多平台发布流程(Windows/Linux/Docker)以及关键配置项;并在技术设计文档中建立链接。
|
||||
- **用户文档完善**:新增 `docs/manual/新手指南.md` 和 `docs/manual/用户指南.md`,提供详细的使用说明和操作指南。
|
||||
27→
|
||||
28→### v1.1.1 (2026-04-06)
|
||||
|
||||
- **文档规范增强**:新增文档同步规则,强制代码变更与文档更新保持同步。
|
||||
- **项目结构说明校准**:修正 README.md 和技术文档中对 `Hua.Todo.Host`、`Hua.Todo.Application` 等模块的路径与职责描述。
|
||||
|
||||
@@ -0,0 +1,128 @@
|
||||
# Hua.Todo 构建与部署手册
|
||||
|
||||
本文档提供 Hua.Todo 项目的版本构建指南与多平台部署流程,侧重于如何产出可分发的版本并将其安装或部署到目标机器。
|
||||
|
||||
## 1. 🏗️ 版本构建流程 (Release Build)
|
||||
|
||||
在进行任何部署之前,必须先通过自动化脚本构建出 Release 版本的产物。
|
||||
|
||||
### 1.1 前提要求
|
||||
|
||||
- **环境检查**:已安装 .NET 10 SDK、Node.js 18+ 以及 Inno Setup 6(仅 Windows 打包需要)。
|
||||
- **脚本入口**:位于根目录的 `publish.ps1` 系列脚本。
|
||||
|
||||
### 1.2 执行构建
|
||||
|
||||
根据目标平台执行对应的构建命令:
|
||||
|
||||
- **全平台一键构建**:
|
||||
```powershell
|
||||
.\publish.ps1 -Windows -Linux
|
||||
```
|
||||
- **Windows 版本构建**:
|
||||
```powershell
|
||||
.\publish-windows.ps1
|
||||
```
|
||||
- **Linux 版本构建**:
|
||||
```powershell
|
||||
.\publish-linux.ps1 -RuntimeIdentifier linux-x64 -SelfContained
|
||||
```
|
||||
|
||||
### 1.3 产物输出位置
|
||||
|
||||
所有构建产物将按平台归类在根目录的 `artifacts/` 文件夹下:
|
||||
|
||||
- **Windows**: `artifacts\windows\win-x64\installer\` (安装包) 与 `publish\` (解压即用版)
|
||||
- **Linux**: `artifacts\linux\linux-x64\` (`.tar.gz` 压缩包)
|
||||
|
||||
***
|
||||
|
||||
## 2. 🪟 Windows 客户端部署
|
||||
|
||||
### 2.1 安装包分发 (Recommended)
|
||||
|
||||
1. **分发文件**:将 `hua.todo-{version}-win-x64-setup.exe` 提供给终端用户。
|
||||
2. **安装流程**:用户运行安装程序,程序将自动:
|
||||
- 安装到 `%ProgramFiles%\Hua.Todo`(或用户自定义路径)。
|
||||
- 创建桌面与开始菜单快捷方式。
|
||||
- 写入注册表以支持卸载。
|
||||
3. **静默安装**:支持 Inno Setup 标准静默参数 `/VERYSILENT /SUPPRESSMSGBOXES`。
|
||||
|
||||
### 2.2 绿色版部署
|
||||
|
||||
1. **分发文件**:将 `artifacts\windows\win-x64\publish\` 文件夹整体打包。
|
||||
2. **运行要求**:目标机器需安装 **WebView2 Runtime**。
|
||||
3. **启动程序**:运行 `Hua.Todo.Maui.exe`。
|
||||
|
||||
***
|
||||
|
||||
## 3. 🐧 Linux 客户端部署
|
||||
|
||||
目前提供基于 Avalonia 的 Linux 交付版本,采用 `.tar.gz` 压缩包形式。
|
||||
|
||||
### 3.1 解压部署
|
||||
|
||||
1. **解压**:
|
||||
```bash
|
||||
tar -xzf hua.todo-{version}-linux-x64.tar.gz -C /opt/hua-todo
|
||||
```
|
||||
2. **运行环境**:
|
||||
- 确保系统安装了 `libwebkit2gtk-4.0-37`。
|
||||
- 如果构建时未开启 `-SelfContained`,则需安装 .NET 10 Runtime。
|
||||
3. **权限设置**:
|
||||
```bash
|
||||
chmod +x /opt/hua-todo/Hua.Todo.Avalonia
|
||||
```
|
||||
4. **启动**:直接运行 `/opt/hua-todo/Hua.Todo.Avalonia`。
|
||||
|
||||
***
|
||||
|
||||
## 4. ☁️ 云同步服务端部署 (Server)
|
||||
|
||||
`Hua.Todo.Host` 可作为中心服务端部署,用于任务的云端同步。
|
||||
|
||||
### 4.1 Docker 部署 (Recommended)
|
||||
|
||||
1. **上传代码**或将 `src/Hua.Todo.Host/Dockerfile` 复制到服务器。
|
||||
2. **构建与启动**:
|
||||
```bash
|
||||
docker build -t hua-todo-server -f src/Hua.Todo.Host/Dockerfile .
|
||||
docker run -d \
|
||||
--name hua-todo-server \
|
||||
-p 5173:5173 \
|
||||
-v /data/hua-todo/db:/app/data \
|
||||
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||
hua-todo-server
|
||||
```
|
||||
|
||||
### 4.2 直接部署 (Binary)
|
||||
|
||||
1. **构建 Host**:`dotnet publish src/Hua.Todo.Host -c Release -o ./dist`。
|
||||
2. **同步产物**:将 `./dist` 内容同步到服务器。
|
||||
3. **配置 Systemd 服务**(可选):
|
||||
创建一个 `hua-todo.service` 文件,指向可执行程序并设置工作目录。
|
||||
|
||||
***
|
||||
|
||||
## 5. ⚙️ 关键配置校准
|
||||
|
||||
### 5.1 数据持久化
|
||||
|
||||
- **SQLite 路径**:客户端数据默认存储在用户目录下的 `Hua.Todo/todo.db`;服务端数据存储在容器挂载卷或指定 `appsettings.json` 的连接字符串中。
|
||||
- **备份建议**:定期备份 `todo.db` 文件。
|
||||
|
||||
### 5.2 端口与访问
|
||||
|
||||
- **客户端本地端口**:默认 `5057`。如果被占用,可在 `appsettings.json` 中修改 `WebServer.HostUrl`。
|
||||
- **服务端访问**:确保服务端防火墙已开放对应的 API 端口(默认 5173)。
|
||||
|
||||
***
|
||||
|
||||
## 6. 🛠️ 常见问题排查
|
||||
|
||||
- **客户端无法加载 UI**:检查目标机器是否安装了 WebView2 Runtime(Windows)或 WebKitGTK(Linux)。
|
||||
- **同步连接失败**:
|
||||
1. 确认服务端 API 是否可达(访问 `/swagger` 验证)。
|
||||
2. 确认客户端配置的服务端地址格式(需包含 `http://` 或 `https://`)。
|
||||
- **权限问题**:在 Linux 下运行前,务必执行 `chmod +x` 给主程序执行权限。
|
||||
|
||||
Reference in New Issue
Block a user