3.3 KiB
3.3 KiB
Tech Stack
本表是项目的单一技术事实来源,所有开发必须使用这些确定的技术和版本。
Technology Stack Table
| Category | Technology | Version | Purpose | Rationale |
|---|---|---|---|---|
| 运行时 | .NET | 9.0 | 应用运行时环境 | 最新版本,支持最新 C# 特性,性能优异 |
| UI 框架 | Avalonia | 11.3.7 | 跨平台桌面 UI 框架 | 现代化、跨平台、活跃社区,不向后兼容旧版本 |
| MVVM 框架 | ReactiveUI.Avalonia | 11.3.0 | 响应式 MVVM 实现 | 强大的响应式能力,简化复杂交互逻辑,与 Avalonia 深度集成 |
| 状态管理 | ReactiveUI Observable | Built-in | 属性变化监听和数据流 | ReactiveUI 内置,无需额外依赖,统一状态管理方式 |
| 样式系统 | Semi.Avalonia + 自定义 | Latest | UI 样式和主题 | 基于 Semi Design,结合苹果颜色系统的自定义实现 |
| 颜色系统 | 苹果颜色系统(自定义实现) | N/A | 语义化颜色定义 | Primary/Secondary/Success/Warning/Error 等语义化颜色,支持浅色/暗色主题 |
| 布局系统 | Avalonia Layouts + 自定义 | Built-in + Custom | 控件布局 | Avalonia 内置 Panel 系统 + 自定义 TwoColumnLayout |
| 数据绑定 | Avalonia Binding | Built-in | XAML 数据绑定 | Avalonia 原生支持,与 ReactiveUI 无缝集成 |
| 单元测试 | xUnit | 2.6+ | 单元测试框架 | .NET 生态主流选择,简洁易用 |
| 包管理 | NuGet + 统一包版本管理 | Built-in | 依赖包管理 | 使用 Directory.Packages.props 统一管理包版本,避免版本冲突 |
| 版本控制 | Git | 2.40+ | 代码版本管理 | 行业标准 |
| CI/CD | 手动构建(MVP) | N/A | 持续集成/部署 | MVP 阶段不强制 CI/CD,Post-MVP 可引入 GitHub Actions |
| 代码格式化 | .editorconfig | Built-in | 代码风格统一 | 定义缩进、换行等规则 |
| 文档生成 | XML 文档注释 | Built-in | API 文档 | 所有 public API 必须有 XML 注释 |
| 国际化 | Avalonia IResourceProvider(预留) | Built-in | 多语言支持 | MVP 单一语言,架构预留扩展点 |
| 性能分析 | Visual Studio Profiler / dotnet-trace | Built-in | 性能测量 | 验证 NFR(60fps、100ms 主题切换、200ms PropertyGrid 生成) |
统一包版本管理配置
为了避免多项目间的包版本冲突,项目使用 Central Package Management。
需要在项目根目录创建 Directory.Packages.props:
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Avalonia" Version="11.3.7" />
<PackageVersion Include="ReactiveUI.Avalonia" Version="11.3.0" />
<PackageVersion Include="xUnit" Version="2.6.6" />
<PackageVersion Include="xUnit.runner.visualstudio" Version="2.5.6" />
</ItemGroup>
</Project>
各项目的 .csproj 文件中引用包时不指定版本号:
<ItemGroup>
<PackageReference Include="Avalonia" />
<PackageReference Include="ReactiveUI.Avalonia" />
</ItemGroup>
优势:
- 所有项目使用相同的包版本
- 升级版本时只需修改一处
- 避免版本冲突导致的编译或运行时错误