Files
LanMountainDesktop/docs/01-AirApp开发/01-快速开始/01-环境准备.md

345 lines
9.1 KiB
Markdown
Raw Normal View History

2026-08-11 23:03:55 +08:00
# 轻应用开发 - 环境准备
2026-06-08 03:54:33 +08:00
## 前置要求
2026-08-11 23:03:55 +08:00
在开始开发轻应用之前,请确保你已经:
2026-06-08 03:54:33 +08:00
- ✅ 安装了 .NET 10 SDK
- ✅ 安装了支持 C# 的 IDEVisual Studio 2022 / Rider / VS Code
- ✅ 了解 C# 基础语法
- ✅ 了解 Avalonia UI 基础(或 WPF两者相似
> 如果还没有配置开发环境,请先阅读 [开发环境配置](../../00-快速开始/03-开发环境配置.md)
2026-08-11 23:03:55 +08:00
## 安装轻应用模板
2026-06-08 03:54:33 +08:00
### 安装官方模板
2026-08-11 23:03:55 +08:00
阑山桌面提供了官方的轻应用项目模板,可以快速创建轻应用项目骨架。
2026-06-08 03:54:33 +08:00
```powershell
2026-08-11 23:03:55 +08:00
# 安装轻应用模板包
dotnet new install LanMountainDesktop.AirAppTemplate
2026-06-08 03:54:33 +08:00
# 验证安装成功
dotnet new list | Select-String "lmd"
```
你应该看到类似输出:
```
2026-08-11 23:03:55 +08:00
lmd-airapp LanMountainDesktop AirApp C# LanMountainDesktop/AirApp
2026-06-08 03:54:33 +08:00
```
### 模板版本管理
```powershell
# 查看已安装的模板
dotnet new list lmd
# 更新到最新版本
2026-08-11 23:03:55 +08:00
dotnet new install LanMountainDesktop.AirAppTemplate --force
2026-06-08 03:54:33 +08:00
# 卸载模板
2026-08-11 23:03:55 +08:00
dotnet new uninstall LanMountainDesktop.AirAppTemplate
2026-06-08 03:54:33 +08:00
```
2026-08-11 23:03:55 +08:00
## 创建第一个轻应用项目
2026-06-08 03:54:33 +08:00
### 使用模板创建项目
```powershell
2026-08-11 23:03:55 +08:00
# 创建新轻应用项目
dotnet new lmd-airapp -n MyFirstAirApp
2026-06-08 03:54:33 +08:00
# 进入项目目录
2026-08-11 23:03:55 +08:00
cd MyFirstAirApp
2026-06-08 03:54:33 +08:00
```
### 项目结构
创建后的项目结构如下:
```
2026-08-11 23:03:55 +08:00
MyFirstAirApp/
├── MyFirstAirApp.csproj # 项目文件
├── AirApp.cs # 轻应用入口类
├── airapp.json # 轻应用清单
2026-06-08 03:54:33 +08:00
├── Components/ # 组件目录
│ └── SampleComponent.cs # 示例组件
├── Views/ # 视图目录
│ └── SampleComponentView.axaml # 组件视图
│ └── SampleComponentView.axaml.cs # 视图代码后台
├── ViewModels/ # 视图模型
│ └── SampleComponentViewModel.cs # 组件视图模型
├── Settings/ # 设置页目录
2026-08-11 23:03:55 +08:00
│ └── AirAppSettingsPage.axaml # 设置页视图
│ └── AirAppSettingsPage.axaml.cs # 设置页代码
2026-06-08 03:54:33 +08:00
├── Assets/ # 资源目录
2026-08-11 23:03:55 +08:00
│ └── icon.png # 轻应用图标
2026-06-08 03:54:33 +08:00
└── Localization/ # 本地化目录
└── Strings.resx # 字符串资源
```
2026-08-11 23:03:55 +08:00
## 理解轻应用清单
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
### airapp.json 文件
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
`airapp.json` 是轻应用的元数据文件,定义了轻应用的基本信息。
2026-06-08 03:54:33 +08:00
```json
{
"Id": "com.example.myfirstplugin",
2026-08-11 23:03:55 +08:00
"Name": "My First AirApp",
2026-06-08 03:54:33 +08:00
"Version": "1.0.0",
"Author": "Your Name",
"Description": "My first LanMountainDesktop plugin",
"MinHostVersion": "1.0.0",
"SdkVersion": "5.0.0",
"Dependencies": [],
"Permissions": [
"Network.Access"
],
"Icon": "Assets/icon.png",
"Homepage": "https://github.com/yourusername/myfirstplugin",
"Repository": "https://github.com/yourusername/myfirstplugin.git"
}
```
### 字段说明
| 字段 | 必需 | 说明 |
|------|------|------|
2026-08-11 23:03:55 +08:00
| `Id` | ✅ | 轻应用唯一标识符,建议使用反向域名格式 |
| `Name` | ✅ | 轻应用显示名称 |
| `Version` | ✅ | 轻应用版本号,遵循语义化版本 |
| `Author` | ✅ | 轻应用作者 |
| `Description` | ✅ | 轻应用简介 |
2026-06-08 03:54:33 +08:00
| `MinHostVersion` | ✅ | 最低宿主版本要求 |
| `SdkVersion` | ✅ | 使用的 SDK 版本 |
2026-08-11 23:03:55 +08:00
| `Dependencies` | ❌ | 依赖的其他轻应用 ID 列表 |
| `Permissions` | ❌ | 轻应用所需权限列表 |
| `Icon` | ❌ | 轻应用图标路径 |
| `Homepage` | ❌ | 轻应用主页 URL |
2026-06-08 03:54:33 +08:00
| `Repository` | ❌ | 源码仓库 URL |
### 版本号规范
2026-08-11 23:03:55 +08:00
轻应用版本号遵循 [语义化版本 2.0.0](https://semver.org/lang/zh-CN/)
2026-06-08 03:54:33 +08:00
```
主版本号.次版本号.修订号
例如: 1.2.3
```
- **主版本号**: 不兼容的 API 修改
- **次版本号**: 向下兼容的功能性新增
- **修订号**: 向下兼容的问题修正
## 理解项目文件
2026-08-11 23:03:55 +08:00
### MyFirstAirApp.csproj
2026-06-08 03:54:33 +08:00
```xml
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
2026-08-11 23:03:55 +08:00
<!-- 轻应用元数据 -->
<AirAppId>com.example.myfirstplugin</AirAppId>
<AirAppName>My First AirApp</AirAppName>
<AirAppVersion>1.0.0</AirAppVersion>
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
<!-- 禁用可执行文件生成,轻应用是类库 -->
2026-06-08 03:54:33 +08:00
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
2026-08-11 23:03:55 +08:00
<!-- AirApp SDKv6 起包含共享契约依赖 LanMountainDesktop.Core -->
<PackageReference Include="LanMountainDesktop.AirAppSdk" Version="6.0.0" />
2026-06-08 03:54:33 +08:00
<!-- Avalonia UI -->
<PackageReference Include="Avalonia" Version="12.0.1" />
<PackageReference Include="Avalonia.Themes.Fluent" Version="12.0.1" />
<!-- MVVM Toolkit -->
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
</ItemGroup>
2026-08-11 23:03:55 +08:00
<!-- 复制 airapp.json 到输出目录 -->
2026-06-08 03:54:33 +08:00
<ItemGroup>
2026-08-11 23:03:55 +08:00
<None Update="airapp.json">
2026-06-08 03:54:33 +08:00
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Assets\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<!-- Avalonia 编译支持 -->
<ItemGroup>
<AvaloniaResource Include="**\*.axaml" />
</ItemGroup>
</Project>
```
### 关键配置项
- **TargetFramework**: 必须是 `net10.0`
2026-08-11 23:03:55 +08:00
- **OutputType**: 必须是 `Library`(轻应用是类库,不是可执行文件)
2026-06-08 03:54:33 +08:00
- **Nullable**: 建议启用,提高代码质量
2026-08-11 23:03:55 +08:00
- **AirAppId/AirAppName/AirAppVersion**: 应与 `airapp.json` 保持一致
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
## 构建轻应用
2026-06-08 03:54:33 +08:00
### 还原依赖
```powershell
dotnet restore
```
### 构建项目
```powershell
# Debug 模式
dotnet build
# Release 模式
dotnet build -c Release
```
### 查看输出
构建成功后,输出目录结构:
```
bin/Debug/net10.0/
2026-08-11 23:03:55 +08:00
├── MyFirstAirApp.dll # 主程序集
├── MyFirstAirApp.pdb # 调试符号
├── airapp.json # 轻应用清单
2026-06-08 03:54:33 +08:00
├── Assets/ # 资源文件
│ └── icon.png
└── *.dll # 依赖程序集
```
2026-08-11 23:03:55 +08:00
## 调试轻应用
2026-06-08 03:54:33 +08:00
2026-08-11 23:03:55 +08:00
### 方法一:复制到轻应用目录(推荐)
2026-06-08 03:54:33 +08:00
```powershell
2026-08-11 23:03:55 +08:00
# 构建轻应用
2026-06-08 03:54:33 +08:00
dotnet build
2026-08-11 23:03:55 +08:00
# 复制到宿主的轻应用目录
$pluginDir = "$env:LOCALAPPDATA\LanMountainDesktop\plugins\MyFirstAirApp"
2026-06-08 03:54:33 +08:00
New-Item -ItemType Directory -Path $pluginDir -Force
Copy-Item -Path "bin\Debug\net10.0\*" -Destination $pluginDir -Recurse -Force
# 启动宿主应用
# (确保宿主在 Debug 模式下构建,这样可以附加调试器)
```
### 方法二:使用符号链接
在开发模式下,可以创建符号链接避免每次复制:
```powershell
# 创建符号链接(需要管理员权限)
2026-08-11 23:03:55 +08:00
$pluginDir = "$env:LOCALAPPDATA\LanMountainDesktop\plugins\MyFirstAirApp"
2026-06-08 03:54:33 +08:00
$buildDir = "$(pwd)\bin\Debug\net10.0"
New-Item -ItemType SymbolicLink -Path $pluginDir -Target $buildDir -Force
```
### 方法三:配置宿主调试路径
2026-08-11 23:03:55 +08:00
如果你有宿主源码,可以修改宿主的轻应用搜索路径指向你的轻应用构建目录。
2026-06-08 03:54:33 +08:00
在宿主项目的 `appsettings.Development.json` 中:
```json
{
2026-08-11 23:03:55 +08:00
"AirAppPaths": [
"C:\\Dev\\MyFirstAirApp\\bin\\Debug\\net10.0"
2026-06-08 03:54:33 +08:00
]
}
```
### 附加调试器
1. 启动宿主应用LanMountainDesktop
2. 在 Visual Studio 中,选择"调试" → "附加到进程"
3. 找到 `LanMountainDesktop.exe` 进程
4. 点击"附加"
2026-08-11 23:03:55 +08:00
5. 在轻应用代码中设置断点
2026-06-08 03:54:33 +08:00
## 查看日志
### 日志位置
```
%LOCALAPPDATA%\LanMountainDesktop\logs\latest.log
```
### 实时查看日志
```powershell
# PowerShell
Get-Content "$env:LOCALAPPDATA\LanMountainDesktop\logs\latest.log" -Wait -Tail 50
```
### 日志级别
- **Trace**: 最详细的信息,用于诊断
- **Debug**: 调试信息
- **Information**: 一般信息
- **Warning**: 警告信息
- **Error**: 错误信息
- **Critical**: 严重错误
## 常见问题
2026-08-11 23:03:55 +08:00
### 轻应用没有被加载
2026-06-08 03:54:33 +08:00
**检查清单**:
2026-08-11 23:03:55 +08:00
1. 确认 `airapp.json` 存在且格式正确
2. 确认轻应用 DLL 文件存在
2026-06-08 03:54:33 +08:00
3. 查看日志文件中的错误信息
2026-08-11 23:03:55 +08:00
4. 确认轻应用 ID 唯一,没有与其他轻应用冲突
2026-06-08 03:54:33 +08:00
5. 确认 SDK 版本匹配
### 编译错误:找不到类型
2026-08-11 23:03:55 +08:00
**问题**: `error CS0246: The type or namespace name 'IAirApp' could not be found`
2026-06-08 03:54:33 +08:00
**解决方案**:
```powershell
2026-08-11 23:03:55 +08:00
# 确认引用了 AirAppSdk
dotnet add package LanMountainDesktop.AirAppSdk --version 6.0.0
2026-06-08 03:54:33 +08:00
# 清理并重新构建
dotnet clean
dotnet build
```
### Avalonia 视图无法编译
**问题**: AXAML 文件编译错误
**解决方案**:
1. 确认安装了 Avalonia NuGet 包
2. 检查 AXAML 语法是否正确
3. 确认 `AvaloniaResource` 项已配置在 csproj 中
4. 清理并重新构建项目
## 下一步
现在你已经完成了环境准备,可以继续:
2026-08-11 23:03:55 +08:00
- [创建第一个轻应用](02-创建第一个轻应用.md) - 实现轻应用功能
- [轻应用生命周期](../02-核心概念/01-轻应用生命周期.md) - 理解轻应用运行机制
2026-06-08 03:54:33 +08:00
- [组件系统](../02-核心概念/02-组件系统.md) - 创建桌面组件