一、openKylin簡介 openKylin(開放麒麟) 社區是在開源、自願、平等和協作的基礎上,由基礎軟硬體企業、非營利性組織、社團組織、高等院校、科研機構和個人開發者共同創立的一個開源社區,致力於通過開源、開放的社區合作,構建桌面操作系統開源社區,推動Linux開源技術及其軟硬體生態繁榮發展。 ...
一、openKylin簡介
openKylin(開放麒麟) 社區是在開源、自願、平等和協作的基礎上,由基礎軟硬體企業、非營利性組織、社團組織、高等院校、科研機構和個人開發者共同創立的一個開源社區,致力於通過開源、開放的社區合作,構建桌面操作系統開源社區,推動Linux開源技術及其軟硬體生態繁榮發展。
“開放麒麟”(openKylin)是中國首個桌面操作系統開發者平臺,由國家工業信息安全發展研究中心等單位聯合成立,通過開放操作系統源代碼的方式打造具有自主創新技術的開源桌面操作系統。
系統鏡像下載地址:https://www.openkylin.top/downloads/index-cn.html
二、Avalonia簡介(https://avaloniaui.net/)
Avalonia是一個跨平臺的.NET框架,用於構建漂亮、現代的圖形用戶界面(GUI)。
使用Avalonia,您可以從單個代碼庫創建適用於Windows、macOS、 Linux、iOS、Android和Web Assembly的原生應用程式。
Avalonia相容所有支持.NET Standard 2.0的平臺。
Avalonia官方支持下列平臺:
- Windows 8 及更高版本(雖然它也能在Windows 7上正常工作)
- macOS High Sierra 10.13 及更高版本
- Debian 9 (Stretch) 及更高版本
- Ubuntu 16.04 及更高版本
- Fedora 30 及更高版本
Avalonia11版本的中文官方文檔地址:https://docs.avaloniaui.net/zh-Hans/docs/next/welcome
隨著信創、操作系統國產化替換的推廣進程,一些客戶端項目也會有需要轉移到Linux桌面的巨大的市場需求。
目前Linux下桌面程式開發的常見工具的有:QT、Electron、Blazor。而現在WPF有了Avalonia的加持,勢必會在開發原生跨平臺應用時更具有優勢和性價比。
三、VS2022安裝Avalonia開發插件
首先要安裝visual studio2022的開發工具,然後在頂部菜單==>擴展中打開管理擴展,安裝以下兩個插件(註意版本)。
四、openKylin安裝.NET Core環境
在openKylin官方網站上下載鏡像後,可用虛擬機進行安裝,安裝後進入到桌面,然後根據微軟官方安裝教程:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux通過腳本或者下載手動安裝的方法進行安裝.NET Core環境。
需要註意的是,openKylin建立的登錄賬戶不具備root許可權,所以在安裝完成後需要配置以下環境變數,否則運行dotnet時會提示沒有這個命令提示。
具體方法是打開一個終端,然後輸入
sudo -s
輸入密碼回車,然後終端會變成root許可權的終端,接著輸入下麵命令後回車
vim /etc/profile
會打開一個編輯界面,我們按鍵盤的i鍵進入編輯模式,然後到文檔最後插入一行,輸入安裝完.NET Core環境後提示的PATH路徑,比如:
exprot PATH=$PATH:/home/操作系統登錄名/.dotnet
然後按esc,輸入:wq回車,保存退出。隨後重啟OpenKylin系統,重啟後進入到桌面,打開終端,輸入
dotnet --info
回車,看到.NET Core的輸出信息,證明安裝和配置.NET Core環境沒有問題。
五、使用VS2022建立Avalonia桌面項目
在安裝完Avalonia插件和模板後,我們在創建新的項目的時候,可以直接搜索avalonia關鍵字,直接創建一個Avalonia C# Project,會有創建嚮導,按照嚮導提示一步一步創建完畢。
點擊Create按鈕後,稍等片刻即可完成項目創建,我們把創建的帶Desktop結尾的項目設置為啟動項目,然後我們直接F5運行項目,沒有意外的話會看到一個界面,一句英文提示。
六、解決Avalonia桌面項目在openKylin下報Default font name can't be null or empty的問題
我們把ViewModels\MainViewModel.cs把英文的文字改成中英混合的文字。
public string Greeting => "歡迎使用 Avalonia!";
點擊頂部菜單的生成==>發佈選定內容,目標運行時選linux-x64,然後發佈項目。
發佈成功後,我們把項目複製粘貼到openKylin的環境下,然後在終端中定位到項目目錄,運行
dotnet StudyAvalonia.Desktop.dll
會看到經典的 Default font name can't be null or empty. 的錯誤提示:
可見目前它對中文Linux系統的預設字體支持不太好,有的解決辦法是給操作系統設置為英文,但我們國產系統目標群體絕大部分都需要使用中文環境。因此我們在開發項目時自己指定一下項目要用的預設字體來解決這個問題。
這裡我們選用阿裡巴巴的免費可商用的字體==>阿裡巴巴普惠體:https://www.alibabafonts.com/#/font
下載後按照下麵目錄結構放入字體文件(也可自定義其它路徑,只要代碼中的路徑做出對應調整即可)
在Desktop項目中新建兩個類文件
FontSettings.cs
public class FontSettings { public string DefaultFontFamily = "fonts:MyDesignFontFamilies#Alibaba PuHuiTi 2.0"; public Uri Key { get; set; } = new Uri("fonts:MyDesignFontFamilies", UriKind.Absolute); public Uri Source { get; set; } = new Uri("avares://StudyAvalonia.Desktop/Assets/Fonts/AliBaba", UriKind.Absolute); }
AvaloniaAppBuilderExtensions.cs
1 public static class AvaloniaAppBuilderExtensions 2 { 3 public static AppBuilder UseFontAlibaba([DisallowNull] this AppBuilder builder, Action<FontSettings>? configDelegate = default) 4 { 5 var setting = new FontSettings(); 6 configDelegate?.Invoke(setting); 7 8 return builder.With(new FontManagerOptions 9 { 10 DefaultFamilyName = setting.DefaultFontFamily, 11 FontFallbacks = new[] 12 { 13 new FontFallback 14 { 15 FontFamily = new FontFamily(setting.DefaultFontFamily) 16 } 17 } 18 }).ConfigureFonts(manager => manager.AddFontCollection(new EmbeddedFontCollection(setting.Key, setting.Source))); 19 } 20 }
在Program.cs中註冊一下新建的AppBuilder(.UseFontAlibaba())
1 class Program 2 { 3 // Initialization code. Don't use any Avalonia, third-party APIs or any 4 // SynchronizationContext-reliant code before AppMain is called: things aren't initialized 5 // yet and stuff might break. 6 [STAThread] 7 public static void Main(string[] args) => BuildAvaloniaApp() 8 .StartWithClassicDesktopLifetime(args); 9 10 // Avalonia configuration, don't remove; also used by visual designer. 11 public static AppBuilder BuildAvaloniaApp() 12 => AppBuilder.Configure<App>() 13 .UsePlatformDetect() 14 .UseFontAlibaba() 15 .WithInterFont() 16 .LogToTrace() 17 .UseReactiveUI(); 18 }
然後在編譯發佈項目,複製到OpenKylin系統中,重新運行,就可以看到可以正常的跑起來了,界面顯示中文沒有問題了。
七、鳴謝:
https://www.raokun.top/archives/ru-he-zai-avalonia11-zhong-she-zhi-zi-ding-yi-zi-ti
https://github.com/MicroSugarDeveloperOrg/AntDesign.Avalonia
八、轉載請註明來源:https://www.cnblogs.com/wdw984/p/17717864.html