使用Avalonia进行跨平台桌面开发

前言

https://docs.avaloniaui.net/zh-Hans/docs/get-started/install

说一下优缺点

优点

  • 可以开发跨平台应用。
  • 应用的启动速度还不错。
  • 界面的语法更现代化(样式动画更易用)。

缺点

  • 文档较少。

  • 默认不支持热重载。支持热重载的库使用起来也不便捷。

  • 打包程序较大。

    本身打包文件就大。

    在某些场景比如加载网页,WPF能直接使用系统上的Webview2,而它必须嵌入浏览器内核。

  • 窗口透明穿透目前还没找到实现的方法,不知道是否支持。

建议

如果不跨平台,建议使用WPF。

跨平台的通用型应用可以使用Avalonia。

安装 Avalonia UI 模板

开始使用 Avalonia 的最佳方式是使用模板创建一个应用程序。

要安装 Avalonia 模板,请运行以下命令:

1
dotnet new install Avalonia.Templates

备注

对于 .NET 6.0 及更早版本,请将 install 替换为 --install

查看dotnet版本

1
dotnet --version

要列出已安装的模板,请运行以下命令:

1
dotnet new list

安装开发扩展

image-20240910092005235

也可以在线下载

https://marketplace.visualstudio.com/items?itemName=AvaloniaTeam.AvaloniaVS

项目创建及运行

创建项目

1
dotnet new avalonia.mvvm -o z-avalonia-demo01

运行

1
2
cd z-avalonia-demo01
dotnet run

开发过程中我们可以F12进行调试。

创建项目如果报错

当前 .NET SDK 不支持将 .NET 8.0 设置为目标。请将 .NET 7.0 或更低版本设置为目标,或使用支持 .NET 8.0 的 .NET SDK 版本。

查看dotnet版本

1
dotnet --version

比如我的是7.0

打开项目目录的.csproj文件

1
<TargetFramework>net8.0</TargetFramework>

改为

1
<TargetFramework>net7.0</TargetFramework>

这样就能运行了。

打包发布

发布命令

发布单文件

1
dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true /p:PublishTrimmed=true /p:PublishReadyToRun=true /p:PublishReadyToRunShowWarnings=true /p:UseAppHost=true /p:IncludeNativeLibrariesForSelfExtract=true /p:SelfContained=true --self-contained true

发布多文件

1
dotnet publish -c Release -r win-x64 /p:PublishSingleFile=false /p:PublishTrimmed=true /p:PublishReadyToRun=true /p:PublishReadyToRunShowWarnings=true /p:UseAppHost=true /p:IncludeNativeLibrariesForSelfExtract=true /p:SelfContained=true --self-contained true

参数说明

其中,-r 参数表示发布目标平台,win-x64 代表 Windows 64 位。你可以根据需要替换为其他平台。

  • -c Release:指定发布的配置为 Release 模式,这将优化应用程序的性能和大小。
  • -r win-x64:指定目标运行时为 Windows x64 平台,发布输出将为该平台准备。
  • /p:PublishSingleFile=true:设置发布输出为单个可执行文件,将应用程序和其依赖项打包为一个文件。
  • /p:PublishTrimmed=true:启用发布优化,删除未使用的依赖项和代码来减小应用程序的大小。
  • /p:PublishReadyToRun=true:使用 ReadyToRun 编译器进行发布,可以提高应用程序的启动性能。
  • /p:PublishReadyToRunShowWarnings=true:在使用 ReadyToRun 编译器进行发布时显示警告信息。
  • /p:IncludeNativeLibrariesForSelfExtract=true:包含本机库以支持自解压功能,以便在运行时自动提取依赖项。

发布后会在项目目录下的

1
bin\Release\net7.0\win-x64\publish