Files
AtomUI/docs/Gallery/07-TechStack.md
T
chinboy 7df3f29065 docs: 添加 AtomUIGallery 项目全面分析文档
- 00-Index: 文档索引与快速导航
- 01-Overview: 项目概览、目录树、依赖关系、构建运行
- 02-Architecture: MVVM架构、模块划分、核心类职责(含Mermaid图)
- 03-ShowCaseSystem: 72个ShowCase清单、路由注册、布局系统
- 04-WorkspaceSystem: 主窗口、导航面板、菜单系统
- 05-LocalizationSystem: LanguageProvider+Source Generator架构
- 06-IconSystem: IconProvider+Source Generator架构
- 07-TechStack: 技术栈清单(C#/Avalonia/ReactiveUI等)
- 08-CodingConventions: 编码规范与ReactiveUI使用规范
- 09-RisksAndNotes: 风险、技术债、迭代检查清单
2026-04-14 17:45:49 +08:00

175 lines
5.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.
# 技术栈清单
## 1. 编程语言
| 语言 | 版本 | 用途 |
|------|------|------|
| **C#** | 13.0+(.NET 10 默认) | 所有业务逻辑、ViewModel、View code-behind |
| **XAML** | Avalonia XAML | UI 布局定义、样式、主题 |
| **PowerShell** | — | 发布脚本 `PublishToLocal.ps1` |
| **XML** | — | MSBuild 配置、安装程序配置、应用清单 |
## 2. 框架与运行时
| 框架 | 版本 | 用途 |
|------|------|------|
| **.NET** | 10.0 (主目标) | 核心运行时 |
| **.NET** | 8.0 (多目标) | Desktop 项目兼容性支持 |
| **Avalonia UI** | 11.3.12 | 跨平台 UI 框架 |
| **Avalonia.Desktop** | — | 桌面平台支持 |
## 3. UI 技术
| 技术 | 说明 |
|------|------|
| **Avalonia XAML** | 声明式 UI 定义,类似 WPF XAML 但跨平台 |
| **TemplatedControl** | AtomUI 控件基类,支持 ControlTheme 模板化 |
| **ControlTheme** | Avalonia 的样式系统,替代 WPF 的 Style+Template |
| **StyledProperty** | Avalonia 依赖属性等价物 |
| **DirectProperty** | 高性能非跟踪属性 |
| **Avalonia Markup Extensions** | `{Binding}`, `{x:Static}`, `{CaseNavigationLangResource}` 等 |
## 4. MVVM 框架
| 框架 | 版本 | 用途 |
|------|------|------|
| **ReactiveUI** | 通过 Avalonia 集成 | 核心 MVVM 框架 |
| **ReactiveUI.Avalonia** | — | Avalonia 平台集成 |
| **CommunityToolkit.Mvvm** | — | 辅助 MVVM 工具(部分使用) |
### ReactiveUI 核心使用
| 功能 | 使用方式 |
|------|---------|
| `ReactiveObject` | 所有 ViewModel 基类 |
| `RaiseAndSetIfChanged` | 属性变更通知 |
| `IScreen` / `RoutingState` | 导航路由 |
| `IRoutableViewModel` | 可路由 ViewModel |
| `IActivatableViewModel` / `ViewModelActivator` | 生命周期管理 |
| `ReactiveWindow<T>` | 强类型 Window |
| `ReactiveUserControl<T>` | 强类型 UserControl |
| `WhenActivated` | View 激活回调 |
| `Locator` | Service Locator(ViewModel 注册/解析) |
## 5. Source Generators
| Generator | 所属包 | 生成内容 |
|-----------|--------|---------|
| **AtomUI.Generator.LanguageGenerator** | AtomUI.Generator | 语言资源枚举、XAML 扩展、LanguageProviderPool |
| **AtomUI.Generator.IconGenerator** | AtomUI.Generator | 图标提供者枚举、图标加载代码 |
| **AtomUI.Generator.TokenResourceKeyGenerator** | AtomUI.Generator | Token 资源键常量 |
| **AvaloniaNameSourceGenerator** | Avalonia.Generators | XAML x:Name 强类型访问器 |
### Source Generator 配置
```xml
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>GeneratedFiles</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Remove="$(CompilerGeneratedFilesOutputPath)/**/*.cs"/>
</ItemGroup>
```
- `EmitCompilerGeneratedFiles` — 将生成文件写入磁盘(便于调试)
- `CompilerGeneratedFilesOutputPath` — 生成文件输出目录
- `Compile Remove` — 排除生成文件参与编译(避免重复编译)
## 6. 构建工具
| 工具 | 用途 |
|------|------|
| **MSBuild** | 构建引擎 |
| **dotnet CLI** | 命令行构建/运行/发布 |
| **Directory.Build.props** | 全局 MSBuild 属性(目标框架、版本号等) |
| **Directory.Packages.props** | 中央包版本管理(CPM) |
### 构建配置层级
```
src/Directory.Build.props # 全局属性
src/Directory.Packages.props # 全局包版本
src/Version.props # 版本号定义
src/Common.props # 通用属性
controlgallery/Directory.Build.props # Gallery 特定属性(可能覆盖全局)
```
## 7. AtomUI 组件库依赖
| 包 | 用途 |
|----|------|
| `AtomUI.Desktop.Controls` | 桌面控件(Button, Menu, NavMenu 等) |
| `AtomUI.Desktop.Controls.DataGrid` | DataGrid 数据表格控件 |
| `AtomUI.Desktop.Controls.ColorPicker` | ColorPicker 颜色选择器控件 |
| `AtomUI.Icons.AntDesign` | Ant Design 图标库 |
| `AtomUI.Icons.Shared` | 图标共享基础设施 |
| `AtomUI.Generator` | Source Generator(Analyzer) |
## 8. 第三方 NuGet 包
| 包 | 用途 |
|----|------|
| `Avalonia` | UI 框架核心 |
| `Avalonia.Desktop` | 桌面平台支持 |
| `Avalonia.Diagnostics` | DevTools(Debug only) |
| `ReactiveUI` | 响应式 MVVM 框架 |
| `ReactiveUI.Avalonia` | ReactiveUI Avalonia 集成 |
| `CommunityToolkit.Mvvm` | MVVM 工具包 |
## 9. 测试框架
| 框架 | 用途 |
|------|------|
| **xUnit** | 单元测试框架(AtomUIGallery.Tests 项目) |
> **注意**:当前测试项目内容较少,Gallery 主要依赖手动测试和 F5 自动导航测试。
## 10. 发布与部署
| 工具 | 用途 |
|------|------|
| **dotnet publish** | 单文件发布 |
| **PublishToLocal.ps1** | 自动化发布脚本 |
| **WiX** | Windows 安装程序 |
| **DMG** | macOS 安装镜像 |
| **AppImage** | Linux 安装包 |
### 发布配置
```xml
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<UseAppHost>true</UseAppHost>
</PropertyGroup>
<PropertyGroup>
<BuiltInComInteropSupport>true</BuiltInComInteropSupport>
<ApplicationManifest>app.manifest</ApplicationManifest>
</PropertyGroup>
```
- `UseAppHost` — 生成平台特定的可执行文件
- `BuiltInComInteropSupport` — 内置 COM 互操作支持
- `ApplicationManifest` — Windows 应用清单(UAC 等)
- `Roots.xml` — Trimmer 根描述符(防止裁剪关键类型)
### AOT 与 Trimming
当前 AOT 和 Trimming 被注释掉:
```xml
<!-- <IsTrimmable>true</IsTrimmable> -->
<!-- <PublishTrimmed>true</PublishTrimmed> -->
<!-- <PublishAot>true</PublishAot> -->
```
> **风险**:Avalonia + ReactiveUI + 反射依赖使得 AOT/Trimming 支持需要额外工作。
## 11. 日志、DI、序列化
| 功能 | 使用情况 |
|------|---------|
| **日志** | 未使用专门的日志框架 |
| **依赖注入** | 使用 ReactiveUI 的 `Locator` 作为轻量级 DI |
| **序列化** | 未使用 |
| **配置** | 硬编码(无 appsettings.json 等) |