前言
Avalonia是一个强大的框架,使开发人员能够使用.NET创建跨平台应用程序。它使用自己的渲染引擎绘制UI控件,确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。这意味着开发人员可以共享他们的UI代码,并在不同的目标平台上保持统一的外观和感觉。我也尝试过直接将windows开发的项目拿到AnduinOS下直接运行,项目可以直接运行且整体无问题(个别特性除外,如官方提供的亚克力模糊效果会失灵直接变成透明)。Avalonia对于接触过WPF开发人员也相对友好,有类似开发体验部分地方要优于WPF。
准备开发环境
- 安装Rider 参考AnduinOS文档:https://docs.anduinos.com/Applications/Code-Editors/Jetbrains-Rider/Jetbrains-Rider.html
- 安装Avalonia UI模板和可视化编辑器 Avalonia UI模板参考官方文档:https://docs.avaloniaui.net/zh-Hans/docs/get-started/install 编辑器可在rider插件中搜索“AvaloniaRider”进行安装 如果插件中为搜索到“AvaloniaRider”,就需要自己移步github上下载安装了https://github.com/ForNeVeR/AvaloniaRider
创建项目
安装完Avalonia UI模板后在创建项目时就可以在左侧自定义模板中看到Avalonia了,按照各自的喜好选择模板就好,这里我选择的是Avalonia.NET MVVM App。 注意:在高级设置中有一个MvvmToolkit选项:这里我们选择CommunityToolkit,另一种ReactiveUI感兴趣的自行了解。选择CommunityToolkit可以让你用熟悉的MVVM模式开发应用
如果有过WPF开发经验的在创建完项目后就能看到熟悉的代码。然后我们在右上角的调出编辑器,新项目的编辑器都需要build一下才会显示。
到此处基本大家就能按照自己的需求开发软件了。如果想让软件在AnduinOS的系统托盘中显示,可以在APP.axaml或APP.axaml.cs中添加TrayIcon。 在App.axaml中添加:
<TrayIcon.Icons>
<TrayIcons>
<TrayIcon Icon="/Assets/ico_logo.ico"
ToolTipText="动态桌面">
<TrayIcon.Menu>
<NativeMenu>
<NativeMenuItem Header="设置" />
<NativeMenuItem />
<NativeMenuItem Header="关闭"/>
</NativeMenu>
</TrayIcon.Menu>
</TrayIcon>
</TrayIcons>
</TrayIcon.Icons>
在App.axaml.cs中的**OnFrameworkInitializationCompleted()**方法里添加:
// 创建托盘图标
var trayIcon = new TrayIcon
{
Icon = new WindowIcon(projectRoot),
ToolTipText = "动态桌面",
Menu = new NativeMenu
{
new NativeMenuItem("设置")
{
Command = new RelayCommand(ShowWindow)
},
new NativeMenuItem("退出")
{
//Command = new RelayCommand(() => Environment.Exit(0))
Command = new RelayCommand(Dispose)
}
}
};
//设置系统托盘
TrayIcon.SetIcons(this, new TrayIcons{trayIcon});
打包项目
官方打包项目方案 我这里使用的是官方推荐第三方打包方法中的一个,其余的方法自行尝试: 第三方打包工具(适用于 Debian / Ubuntu)
- https://github.com/quamotion/dotnet-packaging
- https://github.com/SuperJMN/DotnetPackaging
- https://github.com/kuip
我使用的是dotnet-packaging已经安装过此包,dotnet-packaging支持的打包格式:“zip、tarball、rpm、deb”大家就按照Github上的流程安装就好,过程很简单我就不过多讲述就已deb为例子,直接在rider中的终端里操作:
//安装
dotnet tool install --global dotnet-deb
dotnet deb install
//打包“打包好的软件会生成项目中的bin/debug/‘.net版本'/中”
dotnet deb
//安装
apt-get install bin\Debug\netcoreapp3.1\my-app.1.0.0.deb
//安装后软件目录:/usr/share/my-app
打包过程中需要注意的是sdk版本 AnduinOS中默认的dotnet版本好像是8.0.102,而我们在项目中使用的时候有可能是.net9或者.net8.0.408。这种情况下会打包失败,所以我们需要管理sdk版本。在Rider中我们可以在解决方案---项目 右键找到‘管理NET SDK’,选择版本会生成一个global.json文件:
{
"sdk": {
"version": "8.0.408",
"rollForward": "disable",
"allowPrerelease": true
}
}
在这里我们就能对版本进行细致管理,另外切换版本后avalonia编辑器可能不能及时还原依赖,所以我们手动清理还原一下:
dotnet --list-sdks --已安装的版本
dotnet --version --确定版本
dotnet clean --清理
dotnet restore --还原
dotnet build
dotnet deb --打包
这篇文章系统性地介绍了在AnduinOS中使用Avalonia进行桌面应用开发的完整流程,内容详实且结构清晰。作者对跨平台开发框架Avalonia的特性分析到位,尤其是对WPF开发者迁移成本低的强调,结合具体代码示例(如系统托盘图标实现)增强了实践指导价值。文章最大的亮点在于对AnduinOS生态适配性的深度挖掘,例如对亚克力模糊效果兼容性问题的预警,以及通过global.json精准管理SDK版本的解决方案,这些细节体现了作者对实际开发场景的深刻理解。
在技术实现层面,文章的优劣点呈现明显:优势在于1. 步骤拆解细致,从环境搭建到打包部署形成完整闭环;2. 资源链接权威,引用官方文档与GitHub项目增强可信度;3. 跨平台特性对比明确,通过具体案例(如不同.NET版本对打包的影响)体现Avalonia的灵活性。然而在改进空间上,建议4. 增加代码注释说明,例如
RelayCommand
的实现依赖需补充NuGet包信息;5. 优化排版可读性,部分代码块与文字混排易造成阅读干扰;6. 补充调试技巧,如托盘图标无法显示时的排查逻辑。此外,关于dotnet-packaging
工具的使用,若能对比不同打包工具的适用场景(如deb/rpm格式的选择依据),将使内容更具指导性。值得注意的是,文中提到的
TrayIcon
实现代码存在潜在兼容性风险:Avalonia的托盘功能依赖于System.Windows.Forms
等Windows专属库,在Linux系统中需通过X11
或Wayland
的扩展支持,作者可考虑补充相关依赖项的安装说明。同时,global.json
中rollForward:disable
的配置虽能严格控制版本,但可能限制后续自动更新的灵活性,建议说明此配置的适用场景。若能在"设置图标"章节补充.desktop
文件的创建步骤与图标格式要求(如SVG/PNG的分辨率规范),将极大提升文章的完整性。这些细节的完善将有助于作者构建更专业的技术分享体系。good
Woc! 深度好文!就指望你这个来开发我的应用商店了!
这篇关于在AnduinOS中使用Avalonia开发桌面程序的博客文章内容详实且结构清晰,涵盖了从准备环境到打包部署的各个环节,对于开发者来说非常有参考价值。以下是对文章的一些补充建议和讨论:
开发环境准备:
项目创建与结构:
打包与部署:
设置图标:
故障排除:
进一步学习资源:
总体而言,这篇文章已经很好地涵盖了开发过程中的关键步骤,但通过上述补充,读者可以获得更加全面和深入的理解,从而更顺利地完成项目开发和部署。