.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
.NET 跨平台框架Avalonia UI: 填坑指北(二):在Linux上跑起来了的更多相关文章
- .NET 跨平台框架Avalonia UI: 填坑指北(一):熟悉UI操作
Avalonia 是一个跨平台的 .NET UI 框架,支持 Windows.Linux.Mac OSX... (以及Android IOS soon..) 本篇主要介绍Avalonia开发过程和L ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- ansible使用指北(二)
前言在上一篇文章里我们了解了ansible的常用模块,今天我们来了解下ansible-playbook,ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,an ...
- Python之locust踩坑指北
坑点1:locust安装报错 其中一种情况:error:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visua ...
- WEB安全漏洞挖掘向入坑指北
这个指北不会给出太多的网站和方向建议,因为博主相信读者能够从一个点从而了解全局,初期的时候就丢一大堆安全网址导航只会浇灭人的热情,而且我也不适合传道授业解惑hhh 安全论坛: 先知社区 freebuf ...
- .NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库
今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步. 紧跟这次RC1的发布,我们成功地将 ...
- msf stagers开发不完全指北(二)
采用 Golang 开发stagers 上一篇文章 msf stagers开发不完全指北(一)中我们谈到如何采用 c 进行 msf 的 stagers 开发,这篇文章我们探讨一下如何使用 Golang ...
- vueThink框架搭建与填坑(new)
自己跟着官网搭建vueThink框架,发现github上文档有很多坑.所以总结一下(仅针对WIN端下载使用) 1.安装node.js 前端部分是基于node.js上运行的,所以必须先安装node.js ...
- k.tt 研究下生成的逻辑代码:从壹开始前后端分离 [.netCore 填坑 ] 三十二║ 四种方法快速实现项目的半自动化搭建
更新 1.更新小伙伴 @大龄Giser 提出好点子:试试VS的插件扩展:VSIX.ItemProject等,将T4模板给制作插件,这里先记下,有懂的小伙伴可以自己先试试,我会在以后更新. 2.感谢小伙 ...
随机推荐
- P1866 编号
大致题意: 求太郎的n只兔子的编号的排列种数 基本思路: 每只兔子都有一个范围,那么每只兔子的范围就是这只兔子选择编号的种数. 以5 8为例,第一只兔子有5种,第二只兔子有8种,而第一只兔子选择后,第 ...
- 设计模式:observer模式
目标:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新 例子: class Observer //观察者 { public: virtual vo ...
- 题解 洛谷 P4547 【[THUWC2017]随机二分图】
根据题意,题目中所求的即为所有\(n!\)种完美匹配的各自的出现概率之和再乘上\(2^n\)的值. 发现\(n\)很小,考虑状压\(DP\).设\(f_{S,T}\)为左部图匹配情况为\(S\),右部 ...
- Monster Audio 使用教程 (八) Vst3 使用侧链功能
Monster Audio对 Vst3 插件支持侧链功能,例如,我们插入一个Waves C1 comp Stereo 效果器 然后在侧链处,就可以选择任意一个音轨的信号,作为侧链信号源. 注意,只有v ...
- jmeter配置原件之使用CSV Data Set Config参数化
测试过程中经常需要对发送的请求进行参数化,jmeter提供的CSV Data Set Config 配置元件可以很好的对请求数据进行参数化,下面介绍使用CSV Data Set Config参数化 1 ...
- 服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?
导语 | 腾讯会议于2019年12月底上线,两个月内日活突破1000万,被广泛应用于疫情防控会议.远程办公.师生远程授课等场景,为疫情期间的复工复产提供了重要的远程沟通工具.上线100天内,腾讯会议快 ...
- 通过C语言获取MAC地址(转)
原文:http://blog.chinaunix.net/uid-25885064-id-3125167.html #include <sys/ioctl.h>#include <n ...
- 做完这套面试题,你才敢说懂Excel
下面的题目来自一份商品专员的面试题,其中有涉及到条件格式.自定义排序.数据验证制作下拉菜单.查找引用类函数.文本提取函数等等技能. 满满的干货技能可不是商品专员“专属”,如果你能熟练掌握,在平日工作中 ...
- Jenkins部署jmx脚本
针对jenkins+jmeter做接口自动化,jmeter完成测试脚本录入和撰写,而jenkins负责持续集成和报告收集.那么从零实现jenkins可以从以下角度实现 首先需要安装jenkins ...
- ionic 侧边栏实例
侧边栏的使用范例: <body > <ion-side-menus> <!-- 中间内容 --> <ion-side-menu-content ng-cont ...