使用 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,一经查实,立即删除!

相关文章

堆和栈的联系与区别(转贴)

总结的不错.Part 1: 首先,我们举一个例子: void f() { int* pnew int[5]; } 这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分…

oracle leg函数,032-函数的嵌套与LEGB原则

函数的嵌套函数也是可以嵌套的。也就是可以在一个函数内部定义和运行另一个函数。举个例子:>>> def funa():print(funa()正在被调用)def funb():print(funb()正在被调用)funb()>>> funa()funa()正在被调用funb()正在被调用在上述举例中&#xff0…

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

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

~~~~我是一棵小树苗~~~~

其实我在博客园注册已经一个多星期了,可是直到今天才写了这么一点东西。有点不上进啊!!本来呢,我在注册完的第二天就开始写了,刚开始把手放在键盘上,能有两分钟没打一个字。(其实我真的不会写&a…

oracle数据库 append,oracle中insert,copy,insert append执行对比

oracle中insert,copy,insert append执行对比还是由于迁移数据库,测试了insert,copy,insert append的执行速度。环境:oracle9i向oracle11g迁移,linux系统。表已建立,只允许插入数据&a…

依赖倒置在.NET中

高层模块不应该依赖底层模块&#xff0c;两都都应该依赖抽象一个三层的Demo/// <summary> /// 人员实体类 /// </summary> class Person {public int ID { get; set; }public string Name { get; set; }public bool Sex { get; set; } } /// <summary> /// 表…

什么是Session?

首先解释一下什么是Session,如果你不知道的话。当一个访问者来到你的网站的时候一个Session就开始了,当他离开的时候Session 就结束了。本质是来说,cookie是和浏览器有关系,而Session变量就可以存一些资源变量在服务器上面。PHP4用文件存储Session变量, 但理论上可以用数据库或…

oracle日志文件大小规则,在线重做Oracle日志文件大小

下面为您介绍的方法用于实现在线重做Oracle日志文件大小&#xff0c;如果您在Oracle日志文件方面遇到过类似的问题的话&#xff0c;不妨一看。1、创建2个新的日志组alter database add logfile group 4 (D:\ORACLE\ORADATA\ORADB\REDO04_1.LOG) size 1024k;alter database add …

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

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

哎,最近心情非常烦乱!

在他人眼中我是一个没有烦恼、责任、忧虑的“开心人”殊不知在我行为的掩饰之下也有着比一般人更复杂的思绪不表露自己脆弱的一面这是坚强吗我在思考也许这才是真正的脆弱 转载于:https://www.cnblogs.com/godjiahui/archive/2006/11/19/565165.html

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

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

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

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

前台提交数据到php mysql,建立一个基础的MySQL数据库,使用PHP来抓取和处理数据,并抛出给前台...

原创声明本文系作者辛苦码字所得&#xff0c;欢迎分享和转载&#xff0c;但请在明显位置注明作者的如下信息&#xff1a;笔名&#xff1a;来碗鸡蛋面简书主页&#xff1a;https://www.jianshu.com/u/4876275b5a73邮箱&#xff1a;job_tomfoxmail.comCSDN ID&#xff1a;tom_won…

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

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

php 鼠标小手,鼠标移动至少一次时创建PHP会话(Create PHP session when mouse moved at least once)...

鼠标移动至少一次时创建PHP会话(Create PHP session when mouse moved at least once)我想在鼠标移动至少一次时创建php会话&#xff0c;如果鼠标继续移动则不需要做任何事情我正在使用此代码&#xff0c;但它没有解决要求jQuery(document).ready(function(){$(document).mouse…

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

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

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

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

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

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

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

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