Avalonia項目在OpenKylin運行踩坑

来源:https://www.cnblogs.com/raok/archive/2023/07/27/17584382.html
-Advertisement-
Play Games

# Avalonia項目在OpenKylin運行踩坑 本篇博客記錄OpenKylin開源操作系統中運行Avalonia項目遇到的各種問題,會一直更新,最新的內容請點擊文末的鏈接跳轉到我的[博客原文地址](https://www.raokun.top/archives/avalonia-xiang-m ...


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

image-20230725145938957

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中沒有宋體,會自動選擇後面的國標黑體

成果展示

image-20230725181623426

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 環境有所不同。

image-20230725155328226

解決方案

去掉using

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

然後,在其他需要使用 ChatDbcontext 的地方,使用 VMLocator.ChatDbcontext 來獲取上下文實例。確保不要在其他地方使用 using 語句或調用上下文實例的 Dispose 方法。

3.openkylin會自動切換到平板模式

而且切換不回來,程式點不了

image-20230725165153685

解決方案

可以通過桌面側邊欄進行PC/平板模式切換,喚出側邊欄的方法有:

點擊任務欄上的側邊欄圖標;

快捷鍵 super + A;----super對應Windows鍵

通過觸摸手勢,在屏幕右邊緣向左短滑。

閱讀如遇樣式問題,請前往個人博客瀏覽: https://www.raokun.top

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

開源項目地址:https://github.com/raokun/TerraMours.Chat.Ava


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 通過本文可以瞭解FutureTask任務執行的方式以及Future.get已阻塞的方式獲取線程執行的結果原理,並且從代碼中可以瞭解FutureTask的任務執行狀態以及狀態的變化過程。 ...
  • 環境是PhpStorm+Xdebug+WAMP 在實際調試的過程中 碰到了調試還沒走完就自動結束的情況 很尷尬 查閱了相關文檔資料 找到瞭解決方法 首先在php.ini中進行修改 我的配置文件地址在 ``` "D:\phpstudy_pro\Extensions\php\php7.3.4nts\ph ...
  • 通過深入探索Java通信面試的奧秘,我們將揭秘Java中的三種I/O模型(BIO、NIO和AIO)、選擇器(select、poll和epoll)以及網路協議(如HTTP和HTTPS),幫助您瞭解在面試中必備的知識點。這些知識點對於網路編程和系統安全方面的求職者來說至關重要,掌握它們將為您的職業發展打... ...
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 本文是《quarkus實戰》系列的第七篇 ...
  • zTree樹官網:https://www.treejs.cn/v3/main.php#_zTreeInfo 首先來到首頁點擊右上角下載 可以選擇使用Git拉取也可以下載ZIP壓縮包,兩者選其一即可 下載打開文件夾以後是下麵這些文件 然後將這些文件放你所使用的入項目當中,如下圖 將文件放入項目當中以後 ...
  • # Unity UGUI的PointerEventData的介紹及使用 ## 1. 什麼是PointerEventData? PointerEventData是Unity中UGUI系統中的一個重要組件,用於處理用戶輸入的指針事件。它可以獲取用戶的點擊、拖拽、滾動等操作,並提供了一系列的屬性和函數來處 ...
  • # 如何在Avalonia11中設置自定義字體 由於avalonia預設的中文字體顯示的效果不太理想,我們需要下載一些自定義的字體,來優化UI的顯示效果。avalonia的[官方文檔地址](https://docs.avaloniaui.net/docs/next/guides/styles-and ...
  • GridViewCheckBoxColumn以CheckBox的形式顯示、編輯bool值,實現行選中效果。 如果需要在表頭添加全選框,可以將EnableHeaderCheckBox設置為true: ```C# private void AddCheckColumn() { checkColumn = ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...