Avalonia是一款开源的跨平台UI框架,支持在Windows、Linux、macOS等多个系统上运行,很多开发者会选择用它开发桌面应用后部署到Linux服务器或桌面环境使用。下面详细介绍Avalonia应用部署到Linux的完整步骤。

一、准备Linux运行环境
首先需要在目标Linux系统上安装.NET运行时,Avalonia应用基于.NET框架开发,运行时是必备依赖。不同Linux发行版的安装方式略有区别,以下是常见发行版的安装示例。
1. Ubuntu/Debian系统
执行以下命令安装.NET运行时,这里以.NET 8为例,你可以根据项目使用的.NET版本调整版本号:
# 添加微软包源 sudo apt-get update sudo apt-get install -y dotnet-sdk-8.0 # 验证安装是否成功 dotnet --version
2. CentOS/RHEL系统
执行以下命令完成安装:
# 添加微软包源 sudo dnf install dotnet-sdk-8.0 # 验证安装 dotnet --version
二、发布Avalonia项目
在开发机器上完成项目编码后,需要将项目发布为适配Linux系统的版本,推荐使用dotnet_publish命令进行发布,这种方式可以生成独立运行的应用包,不需要目标机器额外安装框架依赖。
1. 发布为独立应用
打开终端进入项目根目录,执行以下命令:
# 发布到linux-x64平台,生成独立应用,输出到publish目录 dotnet publish -c Release -r linux-x64 --self-contained true -o ./publish
参数说明:
- -c Release:使用Release配置编译,优化应用性能
- -r linux-x64:指定目标运行时为Linux 64位系统,如果是ARM架构可以替换为linux-arm64
- --self-contained true:生成包含.NET运行时的独立应用,目标机器无需额外安装.NET
- -o ./publish:指定输出目录为当前目录下的publish文件夹
2. 发布为依赖框架的应用
如果目标机器已经安装了对应版本的.NET运行时,可以发布依赖框架的版本,体积更小:
dotnet publish -c Release -r linux-x64 --self-contained false -o ./publish
三、传输发布文件到Linux系统
发布完成后,将本地publish目录下的所有文件传输到目标Linux系统,可以使用scp命令或者可视化工具传输。
使用scp命令传输的示例:
# 将本地publish目录传输到Linux用户的home目录下 scp -r ./publish username@linux_ip:/home/username/
四、配置运行权限并启动应用
文件传输完成后,登录Linux系统,进入publish目录,给应用可执行文件添加运行权限,然后启动应用。
假设你的Avalonia项目名称为MyAvaloniaApp,发布后的可执行文件名称也是MyAvaloniaApp,执行以下命令:
# 进入发布文件目录 cd /home/username/publish # 添加可执行权限 chmod +x MyAvaloniaApp # 启动应用 ./MyAvaloniaApp
五、常见问题排查
1. 缺少系统依赖库
如果启动时报错提示缺少libx11、libgtk等依赖,需要根据发行版安装对应的系统库,以Ubuntu为例:
sudo apt-get install libx11-dev libgtk-3-dev libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev
2. 权限不足
如果提示权限拒绝,检查可执行文件是否有运行权限,或者是否使用了普通用户运行需要root权限的操作。
3. 架构不匹配
如果提示无法执行二进制文件,检查发布时指定的运行时架构是否和Linux系统架构一致,比如ARM架构的系统需要发布linux-arm64版本。
六、示例Avalonia应用代码
以下是一个简单的Avalonia应用示例代码,你可以参考这个结构创建项目后按照上述步骤部署:
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace MyAvaloniaApp
{
public class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
#if DEBUG
this.AttachDevTools();
#endif
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
// 设置窗口标题
this.Title = "Avalonia Linux Demo";
// 添加一个文本控件
var textBlock = new TextBlock
{
Text = "Hello Avalonia on Linux",
HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center,
VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center
};
this.Content = textBlock;
}
}
class Program
{
// 应用入口点
public static void Main(string[] args) => BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace();
}
}
AvaloniaLinux部署dotnet_publishLinux运行环境跨平台开发修改时间:2026-07-09 06:36:30