上一章回顾:  .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. vue配置 less 全局变量

    在使用Vue开发的过程中,通常会用到一些样式的全局变量,如果在每个组件中引入就太繁琐了,维护性也不好,因此全局引入是个不错的想法.下面以less为例,记录一下全局引入less变量的步骤: 1.首先安装 ...

  2. 数字图像处理 第四章 P157 小错误

    问题 我认为P157中部的卷积公式是错的,f(x)h(x-m)应当写为f(m)h(x-m) 解决方法 为了证明,我就用我蹩脚的python实现一下图4.28左列 源代码如下 import numpy ...

  3. 高效C++:构造/析构/赋值

    了解C++默认提供和调用的函数 编译器会自动为每一个空类创建构造函数.拷贝构造函数.赋值运算符以及析构函数 不要使用编译器自动创建的函数,要杜绝这种情况发生,自己编写这些函数 如果不想使用编译器自动生 ...

  4. 发布一个自己做的图片转Base64的软件,Markdown写文章时能用到

    markdownpic 介绍 Markdown编辑时图片生成base64 软件架构 使用了.netcore winform框架 安装教程 直接运行即可 使用说明 拖拽图片文件 双击选择文件 复制粘贴图 ...

  5. SQL语法入门

    SQL语句概述 ·SQL定义:是一种特定目的编程语言,用于管理关系数据库 ·GaussDB T是一种关系数据库,SQL语句包括 1.DDL 数据定义语言,用于定义或修改数据库中的对象(表,视图,序列, ...

  6. flask中的endpoint是什么

    app.view_functions 是一个字典,里面是存储的是 endpoint 与 视图函数的键值对,如果没指名函数视图的endpoint,默认是函数名,而 url_map 是一个列表,里面是ur ...

  7. mysql中的DDL,DML,DQL,DCL

    SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...

  8. Android上传图片的两种方式

    参考:https://www.jianshu.com/p/f47943880cea

  9. Spring集成Quartz定时任务

    1.导入jar包 2.配置applicationContext.xml文件 <!-- 任务调度1 --> <!-- bean id="simpleJob" cla ...

  10. Day05_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...