本篇文章简要介绍如何在Windows系统上编译Avalonia。编译的步骤主要是参考了github.com/AvaloniaUI/…(有少许差异)。整体来说,整个编译过程并不复杂,耗时大约在1-4小时。知道如何编译Avalonia后,如果你想为这个开源项目贡献代码,就可以自己验证代码的有效性了。
准备工作
编译源码的机器需要提前安装必要的工具和SDK。括号里是我编译源代码时用到的版本。
- Windows OS(Windows 11 22H2)
- Git(2.43.0)
- Avalonia源代码(11.0.6)
- Dotnet SDK(7.0.404)
- Dotnet runtime(6.0.25)
- Android SDK platform package(33)
- JDK(Microsoft OpenJDK 17)
- Nodejs(20.10.0)
源代码编译
如果没有特殊说明,编译用到的命令都在cmd里执行即可。
准备源代码
在git shell里执行以下命令
git clone https://github.com/AvaloniaUI/Avalonia.git
cd Avalonia
git checkout 11.0.6
git submodule update --init
安装workload
dotnet workload install android ios wasm-tools wasm-experimental
安装Tizen Workload
curl https://raw.githubusercontent.com/Samsung/Tizen.NET/main/workload/scripts/workload-install.ps1 -o workload-install.ps1
注意:从Windows 10开始,Windows系统都预先安装了curl,详见curl shipped by Microsoft。如果你使用的是早于Windows 10的Windows系统,需要预先安装curl。
在Powershell里执行上面下载的Powershell脚本
workload-install.ps1
编译
安装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.Andriod.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.Win32.Interoperability.11.0.6.nupkg
- Avalonia.X11.11.0.6.nupkg
- Avalonia.iOS.11.0.6.nupkg
比较有意思的是在Windows平台编译产生了一些和其他平台相关的一些nupkg,比如
- Avalonia.Andriod.11.0.6.nupkg
- Avalonia.LinuxFramebuffer.11.0.6.nupkg
- Avalonia.X11.11.0.6.nupkg
- Avalonia.iOS.11.0.6.nupkg