上一章回顧: .NET 跨平臺框架Avalonia UI: 填坑指北(一):熟悉UI操做html
本篇將要闡述 包括但不只限於Avalonia及全部Windows到Linux跨平臺開發 的一些注意事項:linux
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的機器就不搞了,能夠參考文檔弄一下 } }
我在deepin上測試的時候蹦出來一個很是奇怪的異常:
像是一個沒法加載程序集的異常,是調用WebClient時產生的問題,但換成HttpWebRequest就沒了..
我當時發佈時打開了 獨立->程序集裁剪 也有多是這裏的問題...(有大神知道求告知!)
一樣的問題出如今了Bass音頻解碼器上(簡介)
當你使用 Bass.BASS_StreamCreateURL 方法訪問url上的音樂文件時,不管網絡通暢或連接可訪問與否 都會報 TIMEDOUT 超時錯誤....(暫時沒有找到解救方法 我使用了先下載緩存後解碼的方法)
這個我在deepin上沒有多大問題(中英文能正常顯示 韓語和日語不行)
能夠參考如下文檔: http://www.javashuo.com/article/p-ovwzgwcz-ct.html