.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.感谢小伙 ...
随机推荐
- vue 表格使用el-select
<el-table-column label="示例" width="210" align="center"> <temp ...
- PyQt样式设计
QSS QSS(Qt Style Sheets)即PyQt样式表,是用来定义控件外观的一种机制.QSS内部实现大量参考了CSS,但是功能没有CSS强大,主要体现在选择器少,属性少等. 使用QSS 格式 ...
- Linux cut 命令详解
cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中.我们可以使用 cut 命令从一行字符串中于以字节,字符,字段(分隔符)等单位截取一部分内容出来. 在本 ...
- 五分钟快速搭建 Serverless 免费邮件服务
1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...
- vue学习(四) v-on:事件绑定
//html <div id="app"> <input type="button" value="ok" v-bind: ...
- 5万字长文:Stream和Lambda表达式最佳实践-附PDF下载
目录 1. Streams简介 1.1 创建Stream 1.2 Streams多线程 1.3 Stream的基本操作 Matching Filtering Mapping FlatMap Reduc ...
- scrapy基本用法
scrapy官方文档http://doc.scrapy.org/en/latest/ 一.scrapy安装 安装lxml:pip3 install lxml 安装wheel:pip3 install ...
- Ansible基础
Ansible基于Python paramiko 开发,分布式,无需客户端,轻量级,配置语法使用YMAL 及Jinja2模板语言. 组件: 核心:ansible 核心模块(Core Modules): ...
- JAVA JDBC Template的使用
JAVA JDBC Template的使用 什么是Template? Spring框架对JDBC的简单封装.提供了一个JDBCTemplate对象简化JDBC的开发 Template使用步骤 导入ja ...
- PHP xml_parse_into_struct() 函数
定义和用法 xml_parse_into_struct() 函数把 XML 数据解析到数组中. 该函数把 XML 数据解析到 2 个数组中:高佣联盟 www.cgewang.com Value 数组 ...