Avalonia项目在OpenKylin运行踩坑

本篇博客记录OpenKylin开源操作系统中运行Avalonia项目遇到的各种问题,会一直更新,最新的内容请点击文末的链接跳转到我的博客原文地址查看。

1.Default font family name can't be null or empty

报错内容:

Unhandled exception. System.InvalidOperationException: Default font family name can't be null or empty.
at Avalonia.Media.FontManager..ctor(IFontManagerImpl platformImpl) in /_/src/Avalonia.Base/Media/FontManager.cs:line 37
at Avalonia.Media.FontManager.get_Current() in /_/src/Avalonia.Base/Media/FontManager.cs:line 59
at Avalonia.AppBuilder.<>c__DisplayClass61_0.<ConfigureFonts>b__0(AppBuilder appBuilder) in /_/src/Avalonia.Controls/AppBuilder.cs:line 256
at Avalonia.AppBuilder.SetupUnsafe() in /_/src/Avalonia.Controls/AppBuilder.cs:line 310
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, ShutdownMode shutdownMode) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 219
at TerraMours.Chat.Ava.Program.Main(String[] args)

报错分析:

根据报错信息,应用程序在使用 Avalonia UI 框架时遇到了问题。报错信息表明默认字体系列名称为空或为空字符串。

可以通过以下命令查看系统已安装的字体列表:

fc-list

重点issue

这是一个很久的问题,参考这个issue

https://github.com/AvaloniaUI/Avalonia/issues/4427

尝试第一个解决方案(0.10版本及以前有效)

网上的解决方案,针对0.10版本及以前有效 解决方案一

由于 11.0.0 更改了 Avalonia.Skia.GlyphTypefaceImpl 的访问级别,从公共访问级别更改为内部访问级别,因此上述实现 Avalonia.Platform.IFontManagerImpl 的示例代码现在均不可用。

V11版本解决方案

1.修改环境变量 export Lang=en_ US.UTF-8

https://github.com/AvaloniaUI/Avalonia/issues/12140

将环境变量设置 export Lang=en_ US.UTF-8

1.打开终端。

2.运行以下命令来查看当前的 LANG 环境变量的值:

echo $LANG

3.如果当前的 LANG 值不是 en_US.UTF-8,就需要设置它为 en_US.UTF-8。可以使用以下命令来设置:

export LANG=en_US.UTF-8

4.使用 echo 命令验证环境变量是否已更改:

echo $LANG

5.如果您希望永久设置 LANG 变量,可以将上述命令添加到您的 shell 配置文件中(如 ~/.bashrc~/.bash_profile 等),这样每次启动终端时都会自动设置。

代码中修改掉linux不支持的字体

将字体修改后

 <Setter Property="FontFamily" Value="宋体,国标黑体,Simsun,微软雅黑,Microsoft YaHei,苹方-简,宋体-简" />

linux中没有宋体,会自动选择后面的国标黑体

成果展示

2.Cannot access a disposed context instance

报错记录

Unhandled exception. System.ObjectDisposedException: Cannot access a disposed context instance. A common cause of this error is disposing a context instance that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling 'Dispose' on the context instance, or wrapping it in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.
Object name: 'ChatDbcontext'.
at Microsoft.EntityFrameworkCore.DbContext.CheckDisposed()
at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices()
at Microsoft.EntityFrameworkCore.DbContext.get_Model()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityType()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.get_EntityQueryable()
at Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.System.Collections.Generic.IEnumerable<TEntity>.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Collections.ObjectModel.ObservableCollection`1..ctor(IEnumerable`1 collection)
at TerraMours.Chat.Ava.Views.MainWindow.MainWindow_Loaded(Object sender, RoutedEventArgs e)
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at Avalonia.Threading.SendOrPostCallbackDispatcherOperation.InvokeCore() in /_/src/Avalonia.Base/Threading/DispatcherOperation.cs:line 412
at Avalonia.Threading.DispatcherOperation.Execute() in /_/src/Avalonia.Base/Threading/DispatcherOperation.cs:line 268
at Avalonia.Threading.Dispatcher.ExecuteJob(DispatcherOperation job) in /_/src/Avalonia.Base/Threading/Dispatcher.Queue.cs:line 126
at Avalonia.Threading.Dispatcher.ExecuteJobsCore() in /_/src/Avalonia.Base/Threading/Dispatcher.Queue.cs:line 181
at Avalonia.Threading.Dispatcher.Signaled() in /_/src/Avalonia.Base/Threading/Dispatcher.Queue.cs:line 134
at Avalonia.X11.X11PlatformThreading.CheckSignaled() in /_/src/Avalonia.X11/X11PlatformThreading.cs:line 119
at Avalonia.X11.X11PlatformThreading.RunLoop(CancellationToken cancellationToken) in /_/src/Avalonia.X11/X11PlatformThreading.cs:line 192
at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl) in /_/src/Avalonia.Base/Threading/DispatcherFrame.cs:line 117
at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame) in /_/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs:line 53
at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken) in /_/src/Avalonia.Base/Threading/Dispatcher.MainLoop.cs:line 80
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args) in /_/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs:line 127
at TerraMours.Chat.Ava.Program.Main(String[] args)

原因

在 Linux 环境下发生此错误可能是因为 Linux 环境的异步处理方式与 Windows 环境有所不同。

解决方案

去掉using

public void CreateDatabase()
{
var context = new ChatDbcontext();
context.Database.Migrate();
VMLocator.ChatDbcontext = context;
}

然后,在其他需要使用 ChatDbcontext 的地方,使用 VMLocator.ChatDbcontext 来获取上下文实例。确保不要在其他地方使用 using 语句或调用上下文实例的 Dispose 方法。

3.openkylin会自动切换到平板模式

而且切换不回来,程序点不了

解决方案

可以通过桌面侧边栏进行PC/平板模式切换,唤出侧边栏的方法有:

点击任务栏上的侧边栏图标;

快捷键 super + A;----super对应Windows键

通过触摸手势,在屏幕右边缘向左短滑。

阅读如遇样式问题,请前往个人博客浏览: https://www.raokun.top

拥抱ChatGPT:https://ai.terramours.site

开源项目地址:https://github.com/raokun/TerraMours.Chat.Ava

Avalonia项目在OpenKylin运行踩坑的更多相关文章

  1. Faster_Rcnn在windows下运行踩坑总结

    Faster_Rcnn在windows下运行踩坑总结  20190524 今天又是元气满满的一天! 1.代码下载 2.编译 3.下载数据集 4.下载pre-train Model 5.运行train ...

  2. Android 上传开源项目到 jcenter 实战踩坑之路

    本文微信公众号「AndroidTraveler」首发. 背景 其实 Android 上传开源项目到 jcenter 并不是一件新鲜事,网上也有很多文章. 包括我本人在将开源项目上传到 jcenter ...

  3. 在 .NetCore 项目中使用 SkyWalkingAPM 踩坑排坑日记

    SkyWalking 概述 SkyWalking 是观察性分析平台和应用性能管理系统.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案.支持Java, .Net Core, PHP, ...

  4. 攻城记:Thinkphp框架的项目规划总结和踩坑经验

    一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...

  5. 部署spingboot项目到云服务器踩坑记录

    按教程部署mall电商系统 https://www.macrozheng.com/mall/deploy/mall_deploy_docker.html#docker环境安装 只记录SpringBoo ...

  6. 【转】Thinkphp框架的项目规划总结和踩坑经验

    http://www.360doc.com/content/16/1206/22/466494_612576533.shtml

  7. redis从入门到踩坑

    背景 Redis在互联网项目的使用也是非常普遍的,作为最常用的NO-SQL数据库,对Redis的了解已经成为了后端开发的必备技能.小编对Redis的使用时间不长,但是项目中确两次踩中了Redis的坑, ...

  8. 后端路由项目由 gulp 改为 webpack 的踩坑实录

    前言 公司有个后端路由的项目是用 gulp 作为前端自动化构建工具,最近学习了一下 webpack,深感其强大,一狠心将其改成了 webpack 构建,以下是踩坑实录. gulp 先来说说原来的架构. ...

  9. 首个hybird商业项目踩坑总结

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  10. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

随机推荐

  1. Godot 4.0 加载为占位符(InstancePlaceholder)的用法和特点

    加载为占位符的功能设计上是用来辅助选择性加载场景的.比如一个很庞大的3D世界,玩家一时之间只会处在世界一小部分区域内,同时让整个地图驻留于内存是不现实的,此时需要选择性地灵活加载地图,使用Godot的 ...

  2. SpringBoot定义优雅全局统一Restful API 响应框架四

    如果没有看前面几篇文章请先看前面几篇 SpringBoot定义优雅全局统一Restful API 响应框架 SpringBoot定义优雅全局统一Restful API 响应框架二 SpringBoot ...

  3. Ansible中的变量

    Ansible中的变量 目录 Ansible中的变量 变量概述 变量定义的方式 变量的优先级 如何定义变量 playbook中定义变量 vars_file中定义变量 系统内置变量 inventory定义 ...

  4. RestTemplate发送get请求并携带请求头

    //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.add("X-Access-Token", huaWenToken ...

  5. 获取android app 的Activity 和 Package

    开头 appium 配置, sdk 配置,jdk配置,adb配置,python配置是我们app 自动化测试必不可少的配置,当然这种配置网上有很多,我们在这里就不展开说了. 直接就开始自动化脚本的dem ...

  6. Python-3.10手动配置环境变量

  7. 百度云原生数据库GaiaDB的HTAP与多地多活技术实践

    摘要:云原生数据库在使用存算分离技术后,可以在完全兼容MYSQL协议和语法的情况下,极大提升单实例所能承载的数据规模与吞吐能力上限.但除了对客户端兼容外,对整个数据生态(地域容灾,数据分析,备份恢复) ...

  8. 在国内用Java代理调用OpenAI的ChatGPT的API接口

    第一步:一个科学友好的上网工具,开启全局代理: 第二步:一个注册好的ChatGPT账号,且在个人设置里面生成apiKey:https://platform.openai.com/account/api ...

  9. 使用 Docker 分析高通量测序数据

    端午节假期,先祝各位 Bio IT 的爱好者们,节日快乐! 做生信的童鞋想要学习 Docker,或者使用 Docker+Pipeline 封装自己的一套数据分析流程,相信一定不能错过胡博强老师在201 ...

  10. http_basic认证(401)爆破

    Http Basic认证(401)爆破 hydra,burpsuit 在thm:https://tryhackme.com/room/toolsrus 遇到了这个问题,但这个用的工具是hydra,想起 ...