上一章回顾:  .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

.NET 跨平台框架Avalonia UI: 填坑指北(二):在Linux上跑起来了的更多相关文章

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

    Avalonia 是一个跨平台的 .NET UI 框架,支持 Windows.Linux.Mac OSX... (以及Android  IOS soon..) 本篇主要介绍Avalonia开发过程和L ...

  2. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  3. ansible使用指北(二)

    前言在上一篇文章里我们了解了ansible的常用模块,今天我们来了解下ansible-playbook,ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,an ...

  4. Python之locust踩坑指北

    坑点1:locust安装报错 其中一种情况:error:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visua ...

  5. WEB安全漏洞挖掘向入坑指北

    这个指北不会给出太多的网站和方向建议,因为博主相信读者能够从一个点从而了解全局,初期的时候就丢一大堆安全网址导航只会浇灭人的热情,而且我也不适合传道授业解惑hhh 安全论坛: 先知社区 freebuf ...

  6. .NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库

    今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步. 紧跟这次RC1的发布,我们成功地将 ...

  7. msf stagers开发不完全指北(二)

    采用 Golang 开发stagers 上一篇文章 msf stagers开发不完全指北(一)中我们谈到如何采用 c 进行 msf 的 stagers 开发,这篇文章我们探讨一下如何使用 Golang ...

  8. vueThink框架搭建与填坑(new)

    自己跟着官网搭建vueThink框架,发现github上文档有很多坑.所以总结一下(仅针对WIN端下载使用) 1.安装node.js 前端部分是基于node.js上运行的,所以必须先安装node.js ...

  9. k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建

    更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...

随机推荐

  1. mysql数据delete后的数据恢复

    误删除了一个订单,订单号为:D200711008, 现根据binlog对该订单数据进行恢复. 1. 查看binlog日志, 取最新的一个 mysql-bin.000635 show binary lo ...

  2. react实战 : react 与 canvas

    有一个需求是这样的. 一个组件里若干个区块.区块数量不定. 区块里面是一个正六边形组件,而这个用 SVG 和 canvas 都可以.我选择 canvas. 所以就变成了在 react 中使用 canv ...

  3. ”initialization failure:0x0000000C“错误,何解?

    今天开机后打开软件,报出这样的警告”initialization failure:0x0000000C“. 我问了度娘,看了很多回答,答案参差不齐.其中,有个回答还是很不错的(刚好我的是win10系统 ...

  4. P3756 [CQOI2017]老C的方块

    题目链接 看到网格图+最优化问题,当然要想黑白染色搞网络流.不过这道题显然无法用黑白染色搞定. 仔细观察那四种图形,发现都是蓝线两边一定有两个格子,两个格子旁边一定还有且仅有一个格子.因此我们可以这么 ...

  5. 数据库(十三):MySQL内置方法

    进击のpython ***** 数据库--MySQL内置方法 目录 数据库--MySQL内置方法 视图 增加 修改 删除 触发器 创建 使用 删除 存储过程 无参 有参 事务 代码实现 视图 视图是一 ...

  6. Pexpect模块的简单使用

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.以下所有代码都是在K ...

  7. pandas之cut

    cut( )用来把一组数据分割成离散的区间. cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_low ...

  8. 保姆级教程,如何发现 GitHub 上的优质项目?

    先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...

  9. Hyper-V设置固定IP

    win+x以管理员启动PowerShell 创建虚拟交换机,等同于在Hyper-V管理器界面中新建虚拟网络交换机 New-VMSwitch -SwitchName "NAT-VM" ...

  10. PHP connection_aborted() 函数

    实例 创建一个函数(check_abort()),在客户机终止脚本时写入一条日志消息: <?phpfunction check_abort(){if (connection_aborted()) ...