日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Avalonia开发小结(持续更新)

發布時間:2023/12/13 综合教程 43 生活家
生活随笔 收集整理的這篇文章主要介紹了 Avalonia开发小结(持续更新) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

官網:

https://avaloniaui.net/

源碼:

https://github.com/AvaloniaUI/Avalonia

討論版:

https://gitter.im/AvaloniaUI/Avalonia

最近因為要研究跨平臺開發,不可避免地順帶了解了Linux系統,把聯想平板電腦裝成了Ubuntu 20.04系統。

就像Linux系統一樣,目前對它的了解是,將就著能用,但不是很好用。期間會遇到奇奇怪怪的各種小問題。

就像我的平板,外接的鍵盤帶觸摸板。因為打字的時候很容易觸碰到觸摸板,所以想把它禁用掉。但是這個在Windows系統很容易解決的小問題,可是在Linux下面可能根本無法解決,或者無法找到解決的方法。

但是這種小問題,其實又是非常影響平常的使用體驗的。

這幾天,把原來在Windows平板上用WPF開發的一些小程序都移植成了Avalonia版本。幾個應用折騰下來,感覺還行,做東西還算是方便的,雖然跟WPF比可能還是有很大差距。

本身因為還沒有正式發布,所以肯定還會存在一些問題。

但開發過程中遇到的很多問題,其實很多都是對Avalonia平臺和Linux操作系統不是很熟悉。

就像游戲打怪一樣,WPF換到了Avalonia,一些經驗需要重新積累,其實還是需要幾個項目做下來,慢慢地知道了哪些能做,哪些不能做。然后慢慢地擴展功能,積累新經驗。

最關鍵的是,.net平臺的跨平臺開發,除了Avalonia之外,也沒有更好的選擇。作為用慣了WPF開發的碼農來說,Avalonia應該是目前能找到的最好的代替品。

這幾天都是在Ubuntu上用Rider來開發,比VS Code應該要好用一點,但是Rider的很多操作都跟VS不一樣,也是一個慢慢熟悉的過程。

網上能找到的資料不多,但是很保貴。初次接觸這個平臺可以先看一下官網的幫助文檔。

遇到問題,我一般會去項目的Github的issues搜索一下,可能會有線索。

剩下的百度谷歌,各種想辦法。

再不行,看Avalonia的源碼,看能不能解決。

目前不支持的功能

托盤圖標
沒有ToolBar功能
不支持全局熱鍵
不支持在前面XAML界面注冊事件

目前遇到無法解決的問題

在部分機子上,打開OpenFileDialog時,會卡UI,軟件無響應。
TextBox中 制表符顯示亂碼的問題,目前還不知道怎么解決。

一些缺點

生成的軟件包會比較大,因為要帶個各個系統的各種類庫。

編輯器推薦

Visual Studio 2019

需要安裝一個插件,但是XAML界面下,代碼提示功能比較弱,基本上算沒有,寫起來不是很方便。

JetBrains Rider

目前最新版本是2021版本,本身是商用,可以試用30天。XAML的編輯提示功能會比VS2019要好,不過代碼調試有時候沒VS2019方便,可以兩個IDE結合起來使用。

如果是在Linux系統下開發,因為沒有VS編譯器可用,感覺JetBrains Rider會是最好的選擇,相比較VS Code,集成度會更高,代碼提示等方面都會做得更好一點。

系統測試情況

目前試了一下,能夠正常運行的系統,除了Windows系統外,流行的Ubuntu,Centos,Redhat這些系統應該都沒啥問題。

國產的麒麟系統,之前有同事在中標麒麟上跑成功過,不過是默認的HelloWord應用。

后面我在優麒麟上也是運行成功過,但是復雜一點的應用,能正常編譯,但是運行的時候會報錯:Default font family name can't be null or empty.

在現在用的Ubuntu 20.04操作系統上,其實也遇到這個font family的問題,通過網上提供的方法,是可以解決和正常運行的。

不過盡量先不要用iconfont,用了以后在Windows系統下可能會沒有問題,但是在報字體錯誤的系統下,可能要修改一下那個自定義的字體控制的類。

因為我現在還不知道怎么改,所以采用了最省事的方法,放棄使用iconfont。

Avalonia的應用可以打包成deb安裝包。也可以基于軟件包設置桌面圖標,操作方法參考:

Ubuntu系統下為Avalonia應用創建桌面圖標 - wzwyc - 博客園

https://www.cnblogs.com/wzwyc/p/14820893.html

常見問題解決

1、Ubuntu系統下TextBox中文顯示亂碼

貌似Avalonia必須指定一下當前窗體的字體,不然中文就是會顯示亂碼,之前是直接設置成“Microsoft YaHei”,會導致Ubuntu系統下找不到相應的字體:

private static string GetPlatformFontFamily()
{
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        return "Microsoft YaHei";
    }
    else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
    {
        return "Menlo"; //換成OSX下的中文字體
    }
    else
    {
        return "Noto Sans CJK SC";
    }
}

2、ToolTip的顯示

在要顯示ToolTip的控件上加上附加屬性:

ToolTip.Tip="Tip內容"

3、Ubuntu設置.net core程序開機自啟動

在/etc/systemd/system/ 目錄下創建.service文件。
UploadServer.service文件:

[Unit]
Description=UploadServer
After=network.target
 
[Service]
WorkingDirectory=/www/wwwroot/db.cnsos.net/UploadServer/UploadServer/bin/Debug/netcoreapp3.1
ExecStart=/usr/bin/dotnet /www/wwwroot/db.cnsos.net/UploadServer/UploadServer/bin/Debug/netcoreapp3.1/UploadServer.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=UploadServer

[Install]
WantedBy=multi-user.target

3、UploadServer.service無法正常啟動

發現程序在Ubuntu的終端下用dotnet run可以正常啟動和運行,但是設置為service以后,就是無法正常使用。

通過下面的命令看了一下:

sudo journalctl -f -u FileServer.service

發現服務在不停地啟動和停止。

看了一下代碼,Main函數的未尾使用了Console.ReadLine();

換成:

while (true)
{
    Thread.Sleep(1000);
}

應該是service會自動跳過Console.ReadLine(),然后程序就結束了,然后服務本身設置了自動重啟,所以不停地停止和重啟。

3、Ubuntu系統下路徑不正常的問題

程序在Windows系統下測試良好,但是在Ubuntu系統上卻無法正常運行,看了一下,是文件路徑的問題。

因為客戶端在Windows下運行的,客戶端上傳的路徑里的“”需要換成“/”。寫了一個路徑轉換函數:

public static string ChangePath(string path)
{
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
    {
        path = path.Replace("\", "/");
        if (path.StartsWith("/"))
            path = path.Substring(1);

        return path;
    }

    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        path = path.Replace("/", "\");
        if (path.StartsWith("\"))
            path = path.Substring(1);

        return path;
    }

    return path;
}

另外,在使用Path.Combine(path1,path2)進行路徑組合的時候,path2不能以""或“/”開頭,不然的話,路徑會組合失敗。

3、“Default font family name can't be null or empty.”錯誤問題

部分Linux操作系統下,能夠正常編譯,但是無法啟動應用,會報“Default font family name can't be null or empty.”的錯誤。應該是跟字體有關系。網上找了一下資料。可以參照以下網址的方法來嘗試解決。

https://www.cnblogs.com/joyandjoys/p/14346935.html

4、第三方的MessageBox.Avalonia控件有點問題,會導致應用崩潰退出。

初步判斷是因為窗口的圖標引起的,而且這個圖標不設置也不行。

最新版本已經沒有問題。

var msBoxStandardWindow = MessageBox.Avalonia.MessageBoxManager.GetMessageBoxStandardWindow(new MessageBoxStandardParams
{
    ButtonDefinitions = ButtonEnum.Ok,
    ContentTitle = "提示",
    ContentMessage = "請輸入網址",
    Icon = Icon.Info,
    Style = Style.UbuntuLinux,
    WindowStartupLocation = WindowStartupLocation.CenterOwner,
    FontFamily = "Microsoft YaHei",
});
await msBoxStandardWindow.Show(App.GetActiveWindow());

5、Ubuntu系統下,從IDE上Debug可以正常運行,但是通過系統的桌面圖標無法打開。

試了一下,用.desktop里的路徑直接在終端里面運行,也是無法正常運行的。在終端上面輸出了一些錯誤信息。看了一下,配置文件的路徑,用的是相對路徑。

把它改成下面的形式,應用就能正常打開了。

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Formats/AppConfig")

總結

以上是生活随笔為你收集整理的Avalonia开发小结(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。