Avalonia学习实践(二)--跨平台支持及发布

这篇具有很好参考价值的文章主要介绍了Avalonia学习实践(二)--跨平台支持及发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Avalonia主打跨平台,号称一套代码支持Windows, macOS, Linux, iOS, Android操作系统,其基础是基于.NET Standard 2.0的一系列库,也就是只要平台能支持.NET Standard 2.0,就能运行Avalonia开发的应用。然而理想很丰满、现实很骨感,并不是说跨平台Avalonia没有做到,而是过程中免不了会有些小问题。


1.支持的平台

运行平台 版本
Windows Windows8及其以上版本(Window7也能用,但不保证没问题)
MacOS MacOS High Serra 10.13及其以上版本(没用过苹果,也没有开发的需求,就不详细研究了)
Linux Debian 9、Ubuntu 16.5、Fedora 30及其以上(主要是各种发行版)

移动端跨平台,也就是iOS和Android的支持后面单讲。
附带了解下使用Linux内核国产操作系统的情况:

操作系统 研制单位 备注
银河麒麟 天津麒麟信息技术有限公司
中标麒麟 中标软件科技有限公司 原中标普华
统信UOS 统信软件科技有限公司
中科方德 中科方德软件有限公司
优麒麟 中国CCN联合实验室 基于Ubuntu发行版

目前接触的比较多的有这几款,其他国产操作系统还有StartOS(原ylmf OS)、SPG思普、共创Linux、深度Linux(Deepin)、红旗Linux、中兴新起点(NewStart)、华为鸿蒙(HarmonyOS)等。这其中麒麟系的、中字头的党政军部门用到多,会有专用版本,操作系统版总体不错,桌面版体验差点,不过都能支持.NET Core跨平台,运行Avalonia应用应该可以;统信UOS的桌面版算是国产里面用起来比较舒服的,尤其是习惯Windows的切换比较顺畅(测试环境用的统信UOS V20家庭版);华为鸿蒙进来势头很猛,定位跟前面几款比不太一样,侧重移动、物联;其他的没用过,不做评价。

2.跨平台的实现

Avalonia实现跨平台的逻辑可以通过应用入口Program.cs的代码了解一下。

public static AppBuilder BuildAvaloniaApp()
    => AppBuilder.Configure<App>()
        .UsePlatformDetect()
        .LogToTrace()
        .UseReactiveUI();

这是MVVM模式下构建应用的代码,常规模式下是没有UseReactiveUI()这一行的。
重点在于方法UsePlactformDetect(),即运行平台检测,方法实现如下:

public static TAppBuilder UsePlatformDetect<TAppBuilder>(this TAppBuilder builder)
    where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
{
    var os = builder.RuntimePlatform.GetRuntimeInfo().OperatingSystem;

    // We don't have the ability to load every assembly right now, so we are
    // stuck with manual configuration  here
    // Helpers are extracted to separate methods to take the advantage of the fact
    // that CLR doesn't try to load dependencies before referencing method is jitted
    // Additionally, by having a hard reference to each assembly,
    // we verify that the assemblies are in the final .deps.json file
    //  so .NET Core knows where to load the assemblies from,.
    if (os == OperatingSystemType.WinNT)
    {
        LoadWin32(builder);
        LoadSkia(builder);
    }
    else if(os==OperatingSystemType.OSX)
    {
        LoadAvaloniaNative(builder);
        LoadSkia(builder);
    }
    else
    {
        LoadX11(builder);
        LoadSkia(builder);
    }
    return builder;
}

static void LoadAvaloniaNative<TAppBuilder>(TAppBuilder builder)
    where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
     => builder.UseAvaloniaNative();
static void LoadWin32<TAppBuilder>(TAppBuilder builder)
    where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
     => builder.UseWin32();

static void LoadX11<TAppBuilder>(TAppBuilder builder)
    where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
     => builder.UseX11();

static void LoadSkia<TAppBuilder>(TAppBuilder builder)
    where TAppBuilder : AppBuilderBase<TAppBuilder>, new()
     => builder.UseSkia();

逻辑也比较好理解,就是应用启动时,通过运行环境信息获取当前的操作系统类型,根据操作系统类型分别加载不同的UI渲染库。操作系统类型为WinNT(Windows)时,加载Win32和Skia的库;操作系统类型为OSX(MacOS)时,加载AvaloniaNative和Skia的库;其他类型,也就是Linux时,加载X11和Skia的库。

3.发布至不同平台

开发Avalonia应用常用的IDE有VisualStudio和JetBrains Rider,以“宇宙第一IDE”VisualStudio为例,发布至不同平台的关键配置如下:
Avalonia学习实践(二)--跨平台支持及发布

  • 配置:主要区分Debug和Release
  • 目标框架:支持.NET Standard 2.0的都可以。
  • 部署模式:选择“独立”可以直接运行,不用另外安装运行时环境;选择“依赖”还需要提前安装运行时环境
  • 目标运行时:需要根据操作系统类型和硬件架构(主要是CPU架构)进行选择
  • 生成单个文件:勾选“生成单个文件”,发布时所有的DLL类库都会打包到一个可执行文件里

发布至测试环境(统信UOS、AMD处理器,所以选择linux-x64)如下:
Avalonia学习实践(二)--跨平台支持及发布
运行效果如下:

Avalonia学习实践(二)--跨平台支持及发布

附.国产CPU指令集路线

国产CPU 指令集
龙芯 MIPS
海光 x86
兆芯 x86
飞腾 arm
鲲鹏 arm
申威 Alpha

其中龙芯是完全自主的指令集,前段时间也刚刚更新了对.Net Core的支持;x86主要是生态好,传统桌面处理器intel、AMD都是x86架构,做兼容适配也方便些;arm以前移动端较多,现在桌面端也逐渐赶上。


上一篇运行环境还是.NET 5.0,结果一看官方文档几天前已经停止支持了,随即卸了VS2019,换上VS2022,也打算看看.NET 7.0中发布的MAUI怎么样。最近.NET版本更新的实在快,感觉快跟不上了,要继续努力啊。
Avalonia学习实践(二)--跨平台支持及发布文章来源地址https://www.toymoban.com/news/detail-471697.html

到了这里,关于Avalonia学习实践(二)--跨平台支持及发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Net跨平台UI框架Avalonia入门-安装和使用

    Net跨平台UI框架Avalonia入门-安装和使用

    Avalonia UI是是Net的跨平台UI框架,支持 Windows、Linux、iOS 和 Android,与Net其他UI框架相比,如WPF(Windows平台)、MAUI跨平台控件(Android、iOS、macOS 和 Windows),主要优势是支持Linux。在国产化的需求下,对于C#开发的程序员,Avalonia适合用来开发Linux的桌面客户端。 v11版本已经发布

    2024年02月05日
    浏览(47)
  • 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发1-通用框架

    Avalonia是.NET的一个跨平台UI框架,提供了一个灵活的样式系统,支持广泛的操作系统,如Windows、Linux、macOS,并对Android、iOS和WebAssembly提供了实验性支持。 之前已经了解了基于Avalonia的项目在国产麒麟系统中运行的案例。正是Avalonia在跨平台的出色表现,学习和了解Avalonia这个

    2024年02月16日
    浏览(14)
  • 基于Avalonia 11.0.0+ReactiveUI 的跨平台项目开发2-功能开发

    项目简介 :目标是开发一个跨平台的AI聊天和其他功能的客户端平台。目的来学习和了解Avalonia。将这个项目部署在openKylin 1.0 的系统上。 为什么使用Avalonia :之前已经了解了基于Avalonia的项目在国产麒麟系统中运行的案例。正是Avalonia在跨平台的出色表现,学习和了解Avalon

    2024年02月17日
    浏览(47)
  • Net跨平台UI框架Avalonia入门-安装和使用(v11版本)

    Net跨平台UI框架Avalonia入门-安装和使用(v11版本)

    avalonia v11 版本发布了,增加了很多新的功能,Avalonia的扩展也同步升级了。 主要更新内容: 辅助功能:增加了对各种辅助工具的支持,提高了Avalonia应用程序的可用性。 输入法编辑器(IME)支持:允许在所有语言中使用屏幕键盘和输入。 合成渲染器:提供更强大、高效和灵

    2024年02月09日
    浏览(66)
  • .NET / C# 开发 Ubuntu Desktop 跨平台图形界面桌面程序 Avalonia - Visual Studio 安装/创建/运行指南 (一)

    .NET / C# 开发 Ubuntu Desktop 跨平台图形界面桌面程序 Avalonia - Visual Studio 安装/创建/运行指南 (一)

    Avalonia 是一个开源的跨平台应用程序框架,用于构建桌面应用程序。它使用 C# 和 XAML 进行开发,可以在 Windows、macOS、iOS、Android 及 Linux 等多个平台上运行。Avalonia 项目地址:https://github.com/AvaloniaUI/Avalonia 本文快速介绍如何入门使用 Avalonia 编写和执行 Ubuntu Desktop 图形界面桌面

    2024年02月01日
    浏览(52)
  • 论文精讲 | 基于昇思MindSpore打造首个深度学习开源视频压缩算法库OpenDMC,支持跨平台和多种评价指标

    论文精讲 | 基于昇思MindSpore打造首个深度学习开源视频压缩算法库OpenDMC,支持跨平台和多种评价指标

    论文标题 OpenDMC: An Open-Source Library and Performance Evaluation for Deep-learning-based Multi-frame Compression 论文来源 ACM MultiMedia 论文链接 https://www.acmmm2023.org/open-source-program/ 代码链接 https://openi.pcl.ac.cn/OpenDMC/OpenDMC 昇思MindSpore作为开源的AI框架,为产学研和开发人员带来端边云全场景协同、

    2024年02月02日
    浏览(57)
  • 跨平台游戏引擎 Axmol-2.1.0 正式发布

    时光流转,转眼间 2024 年了,自上个版本发布已经过去 4 个月,axmol-2.1.0 终于在 2024/1/20 正式发布了,此版本是一个主要的 LTS 维护发行版本,在此先感谢所有参与 axmol 的贡献者,特别感谢以下几位(名称为 github 账户名): @rh101 @DeliWorks @aismann 在 axmol github 社区相当活跃 @

    2024年01月22日
    浏览(16)
  • 跨平台游戏引擎 Axmol-2.0.0 正式发布

    https://github.com/axmolengine/axmol/releases/tag/v2.0.0 添加实验性的 WebAssembly 构建支持(WebGL 2.0),由 @nowasm 贡献 已知问题 WebGL context lost 尚未处理 部署在 github pages 的 demo 可快速预览, 注意:由于 Github 限制,未开启 WASM 多线程支持,因此多线程模块测试会报错,请忽略。 更新:demo 部

    2024年02月09日
    浏览(11)
  • Unity开发进行C、C++源码交互,支持跨平台

    Unity开发进行C、C++源码交互,支持跨平台

    公司新项目,要和做C++算法的人一起合作开发,起初项目定于Windows平台,就看了一些C++和DLL交互的一些资料,做了一套生成DLL交互的接口,后来项目写方案由于设备又定到安卓平台,尝试过打包之后,DLL打包不到安卓平台,试过将dll改名打AB包然后用Assembly.Load的方式,但这种

    2024年01月18日
    浏览(28)
  • 最佳实践-使用Github Actions来构建跨平台容器镜像

    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 最近在写K8s的相关系列文章,因为有涉及到镜像构建,发现在Mac m1的Arm架构下构建的部分镜像,没法在X86架构下使用,不兼容。 尝试网上介绍的各种方式,都已失败告终,效果如下: 最终

    2024年02月05日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包