zoukankan      html  css  js  c++  java
  • .NET 跨平台框架Avalonia UI: 填坑指北(二):在Linux上跑起来了

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

    本篇将要阐述 包括但不仅限于Avalonia及所有Windows到Linux跨平台开发 的一些注意事项:

    一、路径问题

    1.在平常的WPF(及windows应用软件)开发中,访问文件(懒一点的话)(比如我)通常就直接使用  字符串拼接

    举个例子,我们访问软件目录下的Dataxxx.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

  • 相关阅读:
    tp5怎么验证手机号码
    awk理论详解、实战
    chpasswd、dd命令、find实战、添加系统服务、buffer、cached
    python中执行shell命令的几个方法
    rsync使用详解
    sort、dirname、添加环境变量、修改主机名、别名IP、静态路由
    awk数组详解、实战
    python使用Queue进行进程间通信
    python生成器、迭代器、__call__、闭包简单说明
    python装饰器的深度探究
  • 原文地址:https://www.cnblogs.com/zhaiganggang/p/14781589.html
Copyright © 2011-2022 走看看