树莓派OS Lite下依赖框架运行Avalonia程序报.NET location: Not found错误
解决树莓派OS Lite中依赖框架模式运行Avalonia程序的.NET找不到问题
问题分析
从报错信息和dotnet --info输出来看,核心问题有两点:
- 程序的应用宿主(App host)版本为7.0.7,但本地安装的.NET Runtime版本是7.0.8,版本不匹配导致宿主无法找到对应Runtime
- 使用
sudo运行程序时,默认不会继承普通用户的DOTNET_ROOT环境变量,导致系统无法定位.NET安装路径
解决方案
1. 保留环境变量运行程序
直接用sudo -E命令保留当前用户的环境变量(包括DOTNET_ROOT)执行程序:
sudo -E ./AvaloniaApplication1 --drm
如果需要永久让sudo继承DOTNET_ROOT,可以编辑sudoers文件:
sudo visudo
在文件中添加一行:
Defaults env_keep += "DOTNET_ROOT"
保存退出后,后续sudo命令会自动继承该环境变量。
2. 直接用dotnet命令启动程序
绕过应用宿主,直接调用已安装的dotnet runtime启动程序的dll文件:
sudo dotnet ./AvaloniaApplication1.dll --drm
这种方式会强制使用本地已安装的7.0.8版本Runtime,避免版本匹配问题。
3. 统一.NET版本(可选)
如果希望让程序的应用宿主版本和本地Runtime版本一致,可以:
- 重新发布程序时,指定使用7.0.8版本的SDK进行编译发布
- 或者手动下载安装7.0.7版本的.NET Runtime,放在
/home/admin/.dotnet/shared/Microsoft.NETCore.App目录下,确保版本匹配
4. 验证Runtime配置
检查程序目录下的AvaloniaApplication1.runtimeconfig.json文件,确认其中指定的runtimeVersion是否和已安装的Runtime版本兼容:
比如文件中应该类似:
{ "runtimeOptions": { "tfm": "net7.0", "framework": { "name": "Microsoft.NETCore.App", "version": "7.0.0" } } }
这里的version如果指定了具体的7.0.7,会导致只寻找该版本;如果写7.0.0或7.0.x,会兼容更高的小版本(比如7.0.8)。
内容的提问来源于stack exchange,提问作者Melon NG
相关产品推荐
相关产品推荐

