论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
.Net
›
在Windows上使用visualstudio2022开发Avalonia AOT应用 ...
在Windows上使用visualstudio2022开发Avalonia AOT应用程序,摆设到zynqmp ...
八卦阵
论坛元老
|
2025-4-25 16:02:44
|
显示全部楼层
|
阅读模式
楼主
主题
1566
|
帖子
1566
|
积分
4698
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
以下是在 Windows 上使用
Visual Studio 2022
开发 Avalonia 应用程序,并通过
AOT 编译
摆设到
Zynq MPSoC 嵌入式系统
(Linux ARM64) 的完整配置和发布流程:
1. 项目底子配置
修改 .csproj 文件
确保项目文件包罗以下关键配置(需根据实际需求调整):
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><OutputType>WinExe</OutputType>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><TargetFramework>net8.0</TargetFramework>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><RuntimeIdentifier>linux-arm64</RuntimeIdentifier>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><PublishAot><StripSymbols>true</StripSymbols></PublishAot>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><SelfContained><StripSymbols>true</StripSymbols></SelfContained>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><StripSymbols><StripSymbols>true</StripSymbols></StripSymbols>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><InvariantGlobalization><StripSymbols>true</StripSymbols></InvariantGlobalization>
</PropertyGroup>
<ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><PackageReference Include="Avalonia" Version="11.1.0" />
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><PackageReference Include="Avalonia.Desktop" Version="11.1.0" />
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><PackageReference Include="Avalonia.LinuxFramebuffer" Version="11.1.0" />
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><PackageReference Include="Microsoft.DotNet.ILCompiler" Version="9.0.0-preview.*" />
</ItemGroup>
</Project>
复制代码
2. 环境准备
(1) 安装必要工具
在 Windows 上启用
WSL2
(Windows Subsystem for Linux),比方安装
Ubuntu 22.04 LTS
。
在 WSL 中安装
.NET 8 SDK
:
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
复制代码
3. 使用 WSL2 交叉编译
由于 .NET AOT 在 Windows 上无法直接生成 Linux ARM64 二进制文件,需通过 WSL 内的 Linux 环境构建:
(1) 共享项目目录
将你的 Avalonia 项目目录移动到 WSL 的可访问路径(比方 /mnt/c/Projects/YourProject)。
(2) 在 WSL 中实行编译
# 进入项目目录
cd /mnt/c/Projects/YourAvaloniaApp
# 清理并发布项目
dotnet clean
dotnet publish -c Release -r linux-arm64 --self-contained /p:StripSymbols=<StripSymbols>true</StripSymbols>
复制代码
4. 关键配置说明
(1) Avalonia 的 Linux 帧缓冲模式
修改 Program.cs 中的 Avalonia 初始化代码,使其兼容嵌入式 Linux:
public static AppBuilder BuildAvaloniaApp()
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>=> AppBuilder.Configure<App>()
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>.UseLinuxFramebuffer() // 使用帧缓冲模式(非桌面环境)
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>.WithInterFont()<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup> // 确保嵌入字体
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>.LogToTrace();
复制代码
(2) 静态文件嵌入
嵌入式系统可能需要将资源文件(如字体、图片)嵌入程序集:
<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup>
复制代码
5. 摆设到 Zynq MPSoC
(1) 获得编译后的二进制文件
编译输出目录:bin/Release/net8.0/linux-arm64/publish/
文件结构:
YourApp├── YourApp<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup> # 主程序├── Avalonia*.so<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup> # Avalonia 原生库└── *.dll<ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup><ItemGroup>
<EmbeddedResource Include="Resources/**" />
</ItemGroup> # .NET 运行时组件(已 AOT 静态链接)
复制代码
(2) 传输到装备
使用
SCP
或
SD 卡
将 publish 文件夹复制到 ZynqMP 的 Linux 系统。
(3) 设置实行权限
# 在 ZynqMP 的终端中
chmod +x /path/to/YourApp
复制代码
(4) 启动应用程序
# 直接运行(假设使用帧缓冲)
./YourApp --fbdev /dev/fb0
# 如需调试输出
./YourApp --logger=console
复制代码
6. 常见问题解决
问题1:缺少依赖库
症状
:运行时提示 GLIBC_2.29 not found
解决
:在 .csproj 中强制使用低版本依赖:
<PropertyGroup>
<IlcGenerateCompleteTypeMetadata>false</IlcGenerateCompleteTypeMetadata>
<IlcDisableUnsupportedError><StripSymbols>true</StripSymbols></IlcDisableUnsupportedError>
</PropertyGroup>
复制代码
问题2:Avalonia 无法初始化图形
症状
:Unable to open display
解决
:
确保 Linux 内核启用了帧缓冲(/dev/fb0 存在)。
在启动命令中强制指定参数:
./YourApp --display :0 --fbdev /dev/fb0
复制代码
问题3:AOT 编译失败
错误
:Unsupported architecture for Cross-OS
解决
:
确认
Microsoft.DotNet.ILCompiler
使用 9.0.0-preview.* 版本。
强制指定 SDK 路径(如果存在多版本辩论):
dotnet publish -c Release --runtime linux-arm64 -p:IlcPath=/path/to/ilc/sdk
复制代码
7. 高级优化
裁剪未使用的框架代码
(最小化文件体积):
<PropertyGroup>
<PublishTrimmed><StripSymbols>true</StripSymbols></PublishTrimmed>
<TrimMode>link</TrimMode>
</PropertyGroup>
复制代码
禁用调试符号
:
<StripSymbols>true</StripSymbols>
复制代码
总结
通过以上步骤,你可以在 Windows 上利用
WSL2 + .NET 8 AOT
为 Zynq MPSoC 交叉编译 Avalonia 应用程序。关键点包括:
使用 linux-arm64 作为 RuntimeIdentifier
配置 Avalonia 的 Linux 帧缓冲模式
通过 WSL2 实行 AOT 编译
嵌入式环境下的依赖管理和摆设验证
如需进一步优化启动速率或解决特定硬件兼容问题,可参考
.NET AOT 文档
和
Avalonia Linux 指南
。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
八卦阵
论坛元老
这个人很懒什么都没写!
楼主热帖
不可思议但又无处不在的漏洞,WEB安全 ...
C#实现HTTP访问类HttpHelper
【历史上的今天】6 月 2 日:苹果推出 ...
开源共建 | Dinky 扩展批流统一数据集 ...
企业应用超融合架构的设计实例及超融合 ...
袋鼠云春季生长大会圆满落幕,带来数实 ...
大规模 IoT 边缘容器集群管理的几种架 ...
ClickHouse 查询优化详细介绍
重磅硬核 | 一文聊透对象在 JVM 中的内 ...
【软考】系统集成项目管理工程师(二) ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表