使用 Avalonia 开发 UOS 原生应用

最近很火的是国产的操作系统 UOS 系统,这个系统现在存在的问题就是生态没搭建起来。作为 dotnet 开发者,可以通过很多不同方向的技术为 UOS 系统生态贡献应用,如 Xamarin 和 GTK# 或 wine 和 win32 应用,或 mono 和 WinForms 应用等。本文将安利大家使用 Avalonia 框架开发 UOS 上的原生应用

什么是 Avalonia 简单说法就是原 WPF 的开发者没事干写的一套全平台框架,这个框架将 UI 布局和 UI 渲染抽离,通过在不同的平台注入平台原生的渲染框架做到了全平台。理论上无论哪个平台,只要符合渲染原理能够封装注入进去,那么将可以用上 Avalonia 框架

咱的 UOS 系统是基于 deepin 基于 debian 10 的系统,刚好在 dotnet core 支持范围。接下来将通过 dotnet core 全平台的特性,加上 Avalionia 和平台无关的布局和交互计算框架,配合具体平台渲染和交互,就可以做到在 UOS 上开发原生的应用

我有一个 Windows 的设备,在 Windows 上开发的效率比较高,本文的代码编写和构建都将会在 Windows 上进行。当然,用纯 UOS 下开发也是可以的,只是前提是对 Linux 要比较熟悉

请从模版创建开始,从零从控制台搭建的细节太多了,也不是本文关注的内容

先通过 Git 下载 官方的模版库 https://github.com/AvaloniaUI/avalonia-dotnet-templates

然后通过 cd 命令进入到 avalonia-dotnet-templates 文件夹,通过下面代码安装此模版。注意,只有在首次使用才需要安装模版

dotnet new --install ./

上面代码是通过 dotnet 模版安装的方法,安装当前文件夹才存在的模版

如果安装成功,理论上应该可以从输出里面看到下面代码

Avalonia .NET Core App      avalonia.app         [C#]          ui/xaml
Avalonia .NET Core MVVM App avalonia.mvvm        [C#]          ui/xaml
Avalonia UserControl        avalonia.usercontrol [C#]          ui/xaml
Avalonia Window             avalonia.window      [C#]          ui/xaml

接下来新建一个空白文件夹,用命令行进入此文件夹(为什么不用 VisualStudio 原因是命令行说起来更简单)在命令行输入下面代码创建一个 Avalonia 应用

dotnet new avalonia.app

此时将会在当前文件夹里面创建一个 Avalonia 应用

一个空白的 Avalonia 应用默认带有 Hellow 界面,先不要尝试修改界面逻辑,请先发布运行一下

使用 Avalonia 带来的优势是部署特别方便,原因是 dotnet core 部署非常方便,通过下面命令就可以独立发布一个 dotnet core 应用。独立发布将不需要任何依赖,可以做到在 Linux 上复制文件的方式安装

dotnet publish -c release -r linux-x64 --self-contained

此时就完成了生成,尝试将 bin\release\netcoreapp3.0\linux-x64\publish\ 文件夹复制到 UOS 系统上。我采用的方法是在本机先将 Publish 文件夹压缩为 Publish.zip 文件,然后用下面两句代码开启一个 http 静态文件服务器

dotnet tool install --global dotnet-servedotnet serve -p 1007 -a 0.0.0.0

关于上面开启静态文件服务器的方法请看 dotnet serve 一句话开启文件服务器 通过 HTTP 将文件共享给其他设备

在 UOS 上访问 http://xx.xx.xx.xx:1007 就能看到开启的静态文件服务器,找到里面的 publish.zip 文件,下载下来,可以在 UOS 的资源管理器里面,右击解压缩

此时需要通过命令行给他一个权限才能运行,在 UOS 通过快捷键 ctrl+alt+t 打开命令行,通过 cd 命令进去下载的文件夹的路径。默认都会下载到 ~/Download 文件夹,这里可执行文件是一个不带后缀的文件。如我创建的项目是 avalonial 此时我生成的可执行文件就是和项目名相同的不带后缀名的文件,使用下面代码就可以让这个文件有权限执行

chmod 777 ./avalonial

接下来可以选择用命令行输入 ./avalonial 执行,也可以如下图在资源管理器里面双击运行

在成功跑起来之后,再请小伙伴修改界面,写出还玩的应用。此时部署炸了就肯定不会说 Avalonia 不兼容 UOS 了

现在 AvaloniaUI 是完全开源的,我也在这个项目里面水了改注释的代码,欢迎小伙伴组队贡献代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生那些顶级开源项目,你都用过哪些?

CNCF,英文全称为Cloud Native Computing Foundation,中文译为“云原生计算基金会”, 构建可持续生态系统,并围绕一系列高质量开源项目促进社区的发展,本文大概介绍下几个主要的项目。???? Kubernetes⭐ Star: 73.5k https://g…

2021年首届.NET线下沙龙上海站 - 2021 .NET Meetup in Shanghai

.NET Conf 2020 刚刚在苏州落下帷幕, .NET 开发者们的热情不减,来自五湖四海的朋友一起参加疫情之下的 .NET 盛会。2021年上海第一场线下活动就要来了,快来加入我们一起学习.NET 吧!活动时间:2021年1月23日 13:00-18:0…

跟我一起学Redis之加个哨兵让主从复制更加高可用

前言主从复制的实现在上一篇已经分享过,虽然主从复制本身的确让读写分离更加高效,但是对于整体高可用存在很大的劣势:当主节点宕机了之后还需要人为重新进行主从关系配置;这不是开玩笑嘛,这样人为干预,故障…

智能实验室-全能优化(Guardio) 4.0.0.670 beta 8

怎样获取最新版本?□全新下载:全能优化(Guardio):http://files.cnblogs.com/unruledboy/Guardio.Release.zip智能实验室- 全能优化(Guardio) 4.0.0.670 beta 8 更新记录: 1.添加:系统加速 之 系统速度&…

如何在 ASP.Net Core 中实现 健康检查

健康检查 常用于判断一个应用程序能否对 request 请求进行响应,ASP.Net Core 2.2 中引入了 健康检查 中间件用于报告应用程序的健康状态。ASP.Net Core 中的 健康检查 落地做法是暴露一个可配置的 Http 端口,你可以使用 健康检查 去做一个最简单的活性检…

【One by One系列】IdentityServer4(四)授权码流程

接下来我们介绍新内容,OAuth2.0叫做授权码(authorization code),在OpenID Connect中则属于OpenId Connect Flow,称为授权码流程(Authorization Code Flow),这种方式主要场景:保密客户端,服务器端的web应用“例如asp.net core mvc,…

Nemuria UML架构图 第3次迭代. 重构

Nemuria UML架构图 第3次迭代. 重构

suse linux 文件只可读,SUSE LINUX下文件系统变只读的问题解决

现象产生:服务器在挂载SUSE LINUX的系统光盘安装一些系统自带的RPM包后,发现HOME目录文件系统变成只读模式。附图:原因分析:在系统加载光盘之前一切正常,加载后出现这样的问题。加载光盘时,使用了mount命令…

3个值得学习和练手的.net企业级开源项目,强烈推荐

WTM项目名称:WTM项目所用技术栈:wtm mvvm mvc aspnetcore dotnetcore react vue layui layui-admin element-ui ncc等项目简介:WalkingTec.Mvvm框架(简称WTM)是基于.net core的快速开发框架。支持Layui(前后端不分离),…

linux服务器数据同步,Linux服务器数据定期同步和备份方式

数据安全是做数据分析的人需要关注的一大问题。对于我们分析的关键数据、使用的关键脚本都需要定期备份。scp最简单的备份方式,就是使用cp (本地硬盘)或scp (远程硬盘)命令,给自己的结果文件新建一个拷贝;每有更新,再拷贝一份。具体命令如下&…

2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

IEnumerator、IEnumerable这两个接口单词相近、含义相关,傻傻分不清楚。入行多年,一直没有系统性梳理这对李逵李鬼。最近本人在怼着why神的《其实吧,LRU也就那么回事》,方案1使用数组实现LRU,手写算法涉及这一对接口&a…

vs.Net2003无法打开或创建Web应用程序若干解决办法

昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找了一些相关的解决方法,不敢独享&am…

linux管理Windows文件,Linux与Windows互传文件,用户组管理和用户管理

一、与Windows互传文件linux和windows互传文件,需要使用Xshell,Linux系统需要安装lrzsz包。yum install -y lrzsz //linux安装lrzsz包# sz a.txt //Linux端传输当前目录下的a.txt到windows# rz //windows端选择传输文件到Linux当前目前二、/etc/passwd和…

微软向Chromium贡献代码以优化浏览器滚动体验

喜欢就关注我们吧!近日,微软为 Chromium 社区提交了一个新功能,用于解决以 Chromium 为内核的浏览器在 Windows 10 中滚动响应不够流畅的问题。据悉,Chrome 浏览器在访问某些网站并滚动时会出现抖动的情况,导致其在部分…

[C#.NET 拾遗补漏]14:使用结构体实现共用体

在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译…

linux新建文件夹灰色,Ubuntu新建文件夹灰了

#问题描述:WIn10Ubuntu双系统,其中WIn10系统和Ubuntu的目录“/”和“/boot”在同一块固态中,剩余的其他文件都在另一块机械硬盘里面。在机械硬盘下的软件(E:&分区5)和文档(F:&分区6)盘中无法新建文件夹&#x…

使用 C# 9 的records作为强类型ID - 初次使用

强类型ID实体通常是整数,GUID或者string类型,因为数据库直接支持这些类型,但是,如果实体的ID的类型是一样的,比如都是整数的ID,这有可能会出现ID值传错的问题,看下边的示例。public void AddPro…

用拖拉实现设备驱动配置(EsayHMI最新驱动配置方式)

以前的IOServer 是用VB6开发,驱动的配置方式和一般的组态软件没有什么很大的区别,配置起来比较麻烦,对一般的生手来说,要费一番功夫才能配置完毕。 总觉得原有的程序和目前的HMI图元配置环境格格不入,所以重新编写了驱…

MBR的Linux分区机制启动过程,linux系统启动流程(MBR)

总:POST---> Boot Squence ---> Bootloader ---> kernel ---> init---> 完成启动系统:CentOS61、按下电源,cpu找到CMOS中的BIOS并运行起来,这个小程序会完成硬件自检。BIOS:Basic Input and Output Sys…