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

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

本篇將要闡述 包括但不只限於Avalonia及全部Windows到Linux跨平臺開發 的一些注意事項:linux

 

1、路徑問題

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

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

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

在windows上能夠完美運行...網絡

若是你將這一習慣帶到了linux上,找不到文件還好,就怕...框架

(瞬間爆炸..)測試

 

這是由於:字體

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

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

當你在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的機器就不搞了,能夠參考文檔弄一下
} }

 

2、網絡訪問

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

 

 

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

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

 

一樣的問題出如今了Bass音頻解碼器上(簡介)

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

 

3、字體渲染問題

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

能夠參考如下文檔: http://www.javashuo.com/article/p-ovwzgwcz-ct.html

相關文章
相關標籤/搜索