本篇文章简要介绍如何在Linux系统上编译Avalonia。编译的步骤主要是参考了github.com/AvaloniaUI/…和github.com/AvaloniaUI/…。本篇文章以Ubuntu 22.04为例讲解整个源码编译的过程。
准备工作
安装git
sudo apt install git
安装nodejs
Ubuntu 22.04自带的nodejs版本(10.19.0)太低,无法成功编译Avalonia。可以去nodejs官网下载最新的build(我使用的版本是20.10.0),解压后把bin目录设置到环境变量PATH即可。
下载dotnet-install script
curl https://dotnet.microsoft.com/download/dotnet/scripts/v1/dotnet-install.sh -o dotnet-install.sh
安装Dotnet SDK 7.0.404
./dotnet-install.sh --version 7.0.404
默认情况下,dotnet-install.sh会把dotnet下载到用户Home目录的.dotnet目录下。执行下面的命令,让其他脚本和工具能够找到dotnet
export DOTNET_ROOT=$HOME/.dotnet
安装Dotnet runtime 6.0.25
./dotnet-install.sh --runtime dotnet --version 6.0.25
源代码编译
准备源代码
git clone https://github.com/AvaloniaUI/Avalonia.git
cd Avalonia
git checkout 11.0.6
git submodule update --init
安装workload
dotnet workload install wasm-tools wasm-experimental
安装Tizen Workload
curl https://raw.githubusercontent.com/Samsung/Tizen.NET/main/workload/scripts/workload-install.sh -o workload-install.sh
bash workload-install.sh
编译
安装Nuke
dotnet tool install --global Nuke.GlobalTool --version 6.2.1
编译源码
nuke --target Compile --configuration Release
运行测试
nuke --target RunTests --configuration Release
生成nupkg
nuke --target Package --configuration Release
编译结果
编译的最终输出就是一些nupkg文件
- Avalonia.11.0.6.nupkg
- Avalonia.Browser.11.0.6.nupkg
- Avalonia.Browser.Blazor.11.0.6.nupkg
- Avalonia.Controls.ColorPicker.11.0.6.nupkg
- Avalonia.Controls.DataGrid.11.0.6.nupkg
- Avalonia.Controls.ItemsRepeater.11.0.6.nupkg
- Avalonia.Desktop.11.0.6.nupkg
- Avalonia.Diagnostics.11.0.6.nupkg
- Avalonia.Direct2D1.11.0.6.nupkg
- Avalonia.Fonts.Inter.11.0.6.nupkg
- Avalonia.FreeDesktop.11.0.6.nupkg
- Avalonia.Headless.11.0.6.nupkg
- Avalonia.Headless.NUnit.11.0.6.nupkg
- Avalonia.Headless.Vnc.11.0.6.nupkg
- Avalonia.Headless.XUnit.11.0.6.nupkg
- Avalonia.LinuxFramebuffer.11.0.6.nupkg
- Avalonia.Markup.Xaml.Loader.11.0.6.nupkg
- Avalonia.ReactiveUI.11.0.6.nupkg
- Avalonia.Remote.Protocol.11.0.6.nupkg
- Avalonia.Skia.11.0.6.nupkg
- Avalonia.Themes.Fluent.11.0.6.nupkg
- Avalonia.Themes.Simple.11.0.6.nupkg
- Avalonia.Win32.11.0.6.nupkg
- Avalonia.X11.11.0.6.nupkg
有意思的是,在Linux系统下也编译出了Avalonia.Win32.11.0.6.nupkg。