.NET 跨平台框架Avalonia UI: 填坑指北(二):在Linux上跑起來了


上一章回顧:  .NET 跨平台框架Avalonia UI: 填坑指北(一):熟悉UI操作

本篇將要闡述 包括但不僅限於Avalonia及所有Windows到Linux跨平台開發 的一些注意事項:

 

一、路徑問題

1.在平常的WPF(及windows應用軟件)開發中,訪問文件(懶一點的話)(比如我)通常就直接使用  字符串拼接

舉個例子,我們訪問軟件目錄下的\Data\xxx.txt文件:

string path = AppDomain.CurrentDomain.BaseDirectory+"\\Data\\xxx.txt";

在windows上可以完美運行...

如果你將這一習慣帶到了linux上,找不到文件還好,就怕...

(瞬間爆炸..)

 

這是因為:

在Windows中,文件路徑是以單反斜杠表示的: \  例如:C:\xxx.txt

在Linux中,文件路徑是以反斜杠表示的:/  例如:/home/xxx.txt

當你在linux中用\\表示的時候,linux會認為那就是文件名..而且這個文件放在windows找不到也刪不了.....(別問我怎么知道的)

 

所以推薦使用以下方法對接路徑字符串:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"Data","xxx.txt");

 

2.如何正確地在Linux上獲取一個特殊文件夾(我的文檔之類的)

大家都知道 Environment.GetFolderPath 這個方法 但是它在Linux上不是很正常:

MSDN上說:

 

 

 但是我在deepin linux 上測試的結果並不是這樣....

MyDocuments輸出了: /root 

Personal輸出了:/home/twlm(我的用戶名)

所以你想要正確地獲取“我的文檔”文件夾,可以用:

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"Documents", "XXXX");

以及判斷平台,在不同的平台上返回正確的路徑:

public static string MyDocumentsPath { get {
 if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
     return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"Music", "LemonAppCoreDownload");
 else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
     return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyMusic), "LemonAppCoreDownload");
 else return "";//我沒有Mac OSX的機器就不搞了,可以參考文檔弄一下
} }

 

二、網絡訪問

我在deepin上測試的時候蹦出來一個非常奇怪的異常:

 

 

 像是一個無法加載程序集的異常,是調用WebClient時產生的問題,但換成HttpWebRequest就沒了..

我當時發布時打開了 獨立->程序集裁剪 也有可能是這里的問題...(有大神知道求告知!)

 

同樣的問題出現在了Bass音頻解碼器上(簡介)

當你使用 Bass.BASS_StreamCreateURL 方法訪問url上的音樂文件時,無論網絡通暢或鏈接可訪問與否 都會報 TIMEDOUT 超時錯誤....(暫時沒有找到解救方法 我使用了先下載緩存后解碼的方法)

 

三、字體渲染問題

這個我在deepin上沒有多大問題(中英文能正常顯示  韓語和日語不行)

可以參考以下文檔: https://www.cnblogs.com/drzhong/p/11678701.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM