Files
AtomUI/docs/Gallery/07-TechStack.md
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

5.9 KiB
Raw Permalink Blame History

技术栈清单

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 配置

<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 安装包

发布配置

<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 被注释掉:

<!-- <IsTrimmable>true</IsTrimmable> -->
<!-- <PublishTrimmed>true</PublishTrimmed> -->
<!-- <PublishAot>true</PublishAot> -->

风险:Avalonia + ReactiveUI + 反射依赖使得 AOT/Trimming 支持需要额外工作。

11. 日志、DI、序列化

功能 使用情况
日志 未使用专门的日志框架
依赖注入 使用 ReactiveUI 的 Locator 作为轻量级 DI
序列化 未使用
配置 硬编码(无 appsettings.json 等)