提到跨平台桌面应用,很多开发者会先想到Electron——毕竟基于Web技术栈,上手门槛低。但如果你的核心诉求是「高性能」「原生体验」「.NET技术复用」,那Avalonia绝对是更优选择。作为.NET开发者,你是否曾纠结:想做跨平台桌面应用,WPF仅限Windows,MAUI生态尚不完善,Electron又有性能和体积痛点?今天给大家安利一款宝藏框架——Avalonia,不仅完美继承WPF的XAML开发体验,还能一键打包Windows、macOS、Linux甚至Android、iOS应用,堪称.NET跨平台UI的「六边形战士」。

这篇文章从基础认知到实操落地全覆盖,帮你快速上手Avalonia,还会解决大家最关心的「发布部署」和「代码加密防反编译」问题,新手也能轻松跟着做~
一、先搞懂:Avalonia到底是什么?
Avalonia是一款开源跨平台UI框架,基于.NET技术栈,核心优势在于「一次编写,多端运行」,同时兼顾了WPF开发者的使用习惯,学习曲线极低。
先划重点,看看它凭什么圈粉无数:
全平台覆盖:支持Windows(含Win7+)、macOS、Linux,还能延伸到iOS、Android和WebAssembly,真正实现「一套代码走天下」;
独立渲染引擎:不依赖系统原生控件,自己绘制UI,保证各平台外观和体验完全一致,再也不用为不同系统适配头疼;
WPF无缝迁移:沿用XAML布局、数据绑定、MVVM模式,WPF老开发者几乎零成本上手;
开源免费:社区活跃,文档齐全,还支持丰富的第三方控件(如Material Design、SukiUI)。
一 快速实现Hello World
了解完核心优势,我们用5分钟实现一个简单的Hello World程序,快速上手Avalonia开发流程。
1. 环境准备
首先确保你的开发环境满足要求:
安装.NET 7+ SDK(推荐.NET 8):https://dotnet.microsoft.com/zh-cn/download;
安装开发工具:Visual Studio 2022(需勾选「.NET桌面开发」工作负载)或 Rider、VS Code(需安装Avalonia插件);
安装Avalonia模板:打开终端执行以下命令,添加官方项目模板:
dotnet new install Avalonia.Templates2. 创建Avalonia项目
方式1:Visual Studio图形化操作
打开Visual Studio,点击「创建新项目」;
搜索「Avalonia」,选择「Avalonia App」模板,点击「下一步」;
填写项目名称(如AvaloniaHelloWorld)、保存路径,点击「下一步」;
选择目标框架(推荐.NET 8),点击「创建」,完成项目初始化。
方式2:终端命令行创建
打开终端,进入目标文件夹,执行以下命令:
dotnet new avalonia.app -n AvaloniaHelloWorld
cd AvaloniaHelloWorld3. 编写Hello World代码
项目创建完成后,默认生成了基础的窗口结构,我们只需修改XAML代码添加Hello World文本:
在解决方案资源管理器中,找到「Views」文件夹下的「MainWindow.axaml」文件(Avalonia的XAML文件后缀为.axaml);
打开文件,修改XAML代码如下(核心是添加TextBlock控件显示文本):
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:AvaloniaHelloWorld.ViewModels"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="AvaloniaHelloWorld.Views.MainWindow"
Title="Avalonia Hello World">
<!-- 布局容器:垂直居中显示文本 -->
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="Hello World! 我是Avalonia" FontSize="24" Margin="10"/>
<TextBlock Text="跨平台UI框架" FontSize="18" Foreground="Blue" Margin="10"/>
</StackPanel>
</Window>4. 运行程序
方式1:Visual Studio运行
选择目标运行平台(默认是Any CPU,可切换为x64);
点击「启动」按钮(或按F5),等待程序编译运行;
成功后会弹出一个窗口,显示我们编写的Hello World文本。
方式2:终端运行
在项目目录下执行以下命令:
dotnet run核心代码说明
<StackPanel>:布局容器,用于垂直/水平排列子控件,这里设置HorizontalAlignment="Center"和VerticalAlignment="Center"实现内容居中;<TextBlock>:文本显示控件,Text属性设置显示内容,FontSize设置字体大小,Foreground设置字体颜色,Margin设置边距;Title:窗口标题,通过Window标签的Title属性设置。
到这里,你已经完成了Avalonia的Hello World程序!可以尝试修改文本内容、字体样式或布局方式,直观感受Avalonia的开发体验。
适用场景:企业桌面应用、工具类软件、跨平台可视化程序,尤其适合想复用WPF技术栈做跨平台开发的团队。
二、实操第一步:Avalonia项目发布全指南
开发完成后,核心需求就是「让用户能用」。Avalonia发布支持多种模式,这里重点讲最常用的「桌面端可安装程序」方案,分Windows、macOS、Linux三平台说明。
1. 通用前置:发布为可执行程序(文件夹模式)
无论哪个平台,先通过.NET CLI命令发布项目,推荐「文件夹模式」(后续配合打包工具更灵活,避免单文件自解压兼容性问题)。
打开终端,进入项目目录,执行以下命令(以.NET 8、Windows x64为例):
dotnet publish -c Release -r win-x64 --self-contained true `
/p:TrimMode=full ` # 深度裁剪冗余代码,减小体积
/p:PublishSingleFile=false ` # 关闭单文件,生成文件夹(适配后续打包)
/p:DebugType=none ` # 移除调试信息
/p:DebugSymbols=false ` # 禁用PDB调试文件参数说明:
-r win-x64:指定运行时,可替换为osx-x64(macOS)、linux-x64(Linux)等;--self-contained true:自包含模式,包含.NET运行时,用户无需额外安装.NET;TrimMode=full:深度裁剪未使用代码,能显著减小体积。
发布完成后,文件会生成在 项目目录/bin/Release/net8.0/[运行时]/publish/ 下,包含exe、依赖DLL等文件。
2. 各平台打包:制作可安装程序
发布后的文件夹需要进一步打包为用户友好的安装包,不同平台推荐工具不同:
(1)Windows平台:Inno Setup(免费+易用)
这是最常用的方案,能制作带安装界面、快捷方式、卸载功能的exe安装包:
下载安装Inno Setup:https://jrsoftware.org/isdl.php;
新建脚本文件(如
ExampleApp.iss),替换为你的项目信息:推荐通过Inno Setup工具生成
; 基本配置
[Setup]
AppName=ExampleApp ; 应用名称
AppVersion=1.0.0 ; 版本号
AppPublisher=你的名称/公司
DefaultDirName={autopf}\ExampleApp ; 默认安装路径(Program Files)
OutputDir=Output ; 安装包输出目录
OutputBaseFilename=ExampleApp-Setup ; 安装包文件名
Compression=lzma2/max ; 最高压缩率
SolidCompression=yes ; 固实压缩,减小体积
SetupIconFile=app.ico ; 安装程序图标(提前准备.ico文件)
PrivilegesRequired=admin ; 管理员权限(写入Program Files需)
;
; 复制发布文件到安装目录
[Files]
Source: "bin\Release\net8.0\win-x64\publish\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs;
; 创建快捷方式
[Icons]
Name: "{commondesktop}\ExampleApp"; Filename: "{app}\ExampleApp.exe"; IconFilename: "{app}\app.ico"
Name: "{group}\ExampleApp"; Filename: "{app}\ExampleApp.exe"; IconFilename: "{app}\app.ico"
Name: "{group}\卸载 ExampleApp"; Filename: "{uninstallexe}";
; 安装完成后可选启动程序
[Run]
Filename: "{app}\ExampleApp.exe"; Description: "{cm:LaunchProgram,ExampleApp}"; Flags: nowait postinstall skipifsilent;
; 卸载时清理残留
[UninstallDelete]
Type: filesandordirs; Name: "{app}"
Type: filesandordirs; Name: "{userappdata}\ExampleApp"打开脚本,点击「编译」→「编译」(或按F9),即可生成单个exe安装包。
(2)macOS平台:create-dmg
先发布为macOS可执行文件,再制作dmg安装包:
## 1. 发布命令
dotnet publish -c Release -r osx-x64 --self-contained true /p:TrimMode=full
## 2. 安装create-dmg(需先安装brew)
brew install create-dmg
## 3. 制作dmg
create-dmg --volname "ExampleApp" --app-drop-link 450 120 --icon "ExampleApp.app" 150 120 "ExampleApp.dmg" "publish/"(3)Linux平台:AppImage(免安装)
Linux推荐打包为AppImage,用户无需安装,双击即可运行:
## 1. 发布命令
dotnet publish -c Release -r linux-x64 --self-contained true /p:TrimMode=full
## 2. 下载appimagetool
wget https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
## 3. 打包为AppImage
./appimagetool-x86_64.AppImage publish/ ExampleApp.AppImage三、关键一步:加密发布,防止源码泄露
.NET程序编译后生成的是中间代码(CIL),容易被ILSpy、dnSpy等工具反编译,泄露源码。尤其是商业软件,加密防护必不可少。Avalonia推荐两种加密方案,从易到难可选。
1. 基础防护:免费混淆(适合个人/小项目)
核心是通过工具重命名类、方法、变量,打乱代码结构,让反编译后的代码难以阅读。推荐使用开源工具「ConfuserEx」:
下载ConfuserEx:https://github.com/mkaring/ConfuserEx;
打开软件,新建项目,添加发布后的exe/dll文件;
配置混淆规则(推荐勾选):
Rename:重命名标识符(类名、方法名等);
AntiDebug:防止调试;
AntiTamper:防止程序被篡改。
关键:排除Avalonia核心组件,避免混淆后运行崩溃,配置示例:
<rule pattern="true" preset="normal" inherit="false">
<protection id="rename" />
<protection id="anti debug" />
<protection id="anti tamper" />
<!-- 排除Avalonia相关组件 -->
<exclusion pattern="^Avalonia.*" />
<exclusion pattern="^ScottPlot.*" />
</rule>点击「Protect」,生成混淆后的文件,再用前面的工具打包即可。
2. 高级防护:AOT编译(推荐商业项目)
AOT(提前编译)能将CIL中间代码直接编译为原生机器码,彻底杜绝反编译,防护效果最好。.NET 7+已支持Avalonia的AOT编译,步骤如下:
安装依赖:需要Visual Studio的「使用C++的桌面开发」工作负载(提供编译器和链接器),已安装VS的可通过「修改」功能添加(前文有详细步骤);
修改项目文件(.csproj),添加AOT配置:
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<UseAvalonia>true</UseAvalonia>
<PublishAot>true</PublishAot>
<TrimMode>full</TrimMode>
<ApplicationIcon>app.ico</ApplicationIcon>
<TrimmerRootAssembly Include="Avalonia" />
<TrimmerRootAssembly Include="Avalonia.Controls" />
<TrimmerRootAssembly Include="Avalonia.Markup.Xaml" />
</PropertyGroup>执行AOT发布命令:
dotnet publish -c Release -r win-x64 --self-contained true
/p:PublishAot=true
/p:EnableCompressionInSingleFile=true
/p:DebugType=none
/p:DebugSymbols=false💡 注意:AOT编译后体积会略大于普通发布,但防护效果拉满,且启动速度更快。如果使用第三方控件,需确保控件支持AOT。
3. 终极防护:商业加壳(核心代码保护)
如果是核心商业软件,可搭配商业加壳工具(如VMProtect、ByteHide Shield),将代码加密后运行在虚拟机中,反编译难度极高。其中ByteHide Shield专门支持Avalonia,操作简单,只需上传程序文件,选择防护模式,一键生成加密包即可。
四、常见问题排查
AOT编译报错「Platform linker not found」:缺少C++构建工具,安装VS的「使用C++的桌面开发」工作负载即可;
程序体积过大:启用
TrimMode=full裁剪冗余代码,关闭--self-contained true(用户需安装.NET运行时);跨平台运行失败:避免调用平台专属API,确保Avalonia版本兼容目标系统(如Win7需Avalonia 11+)。
总结
Avalonia凭借「跨平台+WPF友好」的特性,成为.NET桌面开发的优选框架。发布时推荐「文件夹模式+第三方工具打包」,兼顾兼容性和用户体验;加密防护可根据项目需求选择:个人项目用ConfuserEx混淆,商业项目优先AOT编译,核心软件搭配商业加壳工具。
感谢阅读!
3066

被折叠的 条评论
为什么被折叠?



