时间:2025-04-25 11:49
人气:
作者:admin
以下是在 Windows 上使用 Visual Studio 2022 开发 Avalonia 应用程序,并通过 AOT 编译部署到 Zynq MPSoC 嵌入式系统 (Linux ARM64) 的完整配置和发布流程:
.csproj 文件确保项目文件包含以下关键配置(需根据实际需求调整):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<!-- 明确目标平台为 Linux ARM64 -->
<RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<!-- 启用 AOT 编译 -->
<PublishAot>true</PublishAot>
<!-- 完全自包含模式(避免动态链接依赖) -->
<SelfContained>true</SelfContained>
<!-- 优化生成文件大小 -->
<StripSymbols>true</StripSymbols>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
<!-- 添加 Avalonia 依赖项 -->
<ItemGroup>
<PackageReference Include="Avalonia" Version="11.1.0" />
<PackageReference Include="Avalonia.Desktop" Version="11.1.0" />
<!-- 使用 Linux 帧缓冲(适用于无桌面的嵌入式环境) -->
<PackageReference Include="Avalonia.LinuxFramebuffer" Version="11.1.0" />
<!-- 原生 AOT 编译支持 -->
<PackageReference Include="Microsoft.DotNet.ILCompiler" Version="9.0.0-preview.*" />
</ItemGroup>
</Project>
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-sdk-8.0
由于 .NET AOT 在 Windows 上无法直接生成 Linux ARM64 二进制文件,需通过 WSL 内的 Linux 环境构建:
将你的 Avalonia 项目目录移动到 WSL 的可访问路径(例如 /mnt/c/Projects/YourProject)。
# 进入项目目录
cd /mnt/c/Projects/YourAvaloniaApp
# 清理并发布项目
dotnet clean
dotnet publish -c Release -r linux-arm64 --self-contained /p:StripSymbols=true
修改 Program.cs 中的 Avalonia 初始化代码,使其兼容嵌入式 Linux:
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UseLinuxFramebuffer() // 使用帧缓冲模式(非桌面环境)
.WithInterFont() // 确保嵌入字体
.LogToTrace();
嵌入式系统可能需要将资源文件(如字体、图片)嵌入程序集:
<!-- 在 .csproj 中添加 -->
<ItemGroup>
<!-- 嵌入 Resources 文件夹下所有文件 -->
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
bin/Release/net8.0/linux-arm64/publish/YourApp
├── YourApp # 主程序
├── Avalonia*.so # Avalonia 原生库
└── *.dll # .NET 运行时组件(已 AOT 静态链接)
publish 文件夹复制到 ZynqMP 的 Linux 系统。# 在 ZynqMP 的终端中
chmod +x /path/to/YourApp
# 直接运行(假设使用帧缓冲)
./YourApp --fbdev /dev/fb0
# 如需调试输出
./YourApp --logger=console
GLIBC_2.29 not found.csproj 中强制使用低版本依赖:<PropertyGroup>
<IlcGenerateCompleteTypeMetadata>false</IlcGenerateCompleteTypeMetadata>
<IlcDisableUnsupportedError>true</IlcDisableUnsupportedError>
</PropertyGroup>
Unable to open display/dev/fb0 存在)。./YourApp --display :0 --fbdev /dev/fb0
Unsupported architecture for Cross-OS9.0.0-preview.* 版本。dotnet publish -c Release --runtime linux-arm64 -p:IlcPath=/path/to/ilc/sdk
<PropertyGroup>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>link</TrimMode>
</PropertyGroup>
<StripSymbols>true</StripSymbols>
通过以上步骤,你可以在 Windows 上利用 WSL2 + .NET 8 AOT 为 Zynq MPSoC 交叉编译 Avalonia 应用程序。关键点包括:
linux-arm64 作为 RuntimeIdentifier如需进一步优化启动速度或解决特定硬件兼容问题,可参考 .NET AOT 文档和 Avalonia Linux 指南。