上一章回顾: .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.noobyard.com/article/p-fleyniyd-ct.html