介绍一款.NET开源架构.NET MAUI

ops/2024/10/21 3:08:09/

        .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。

        使用 .NET MAUI,可从单个共享代码库开发可在 Android、iOS、macOS 和 Windows 上运行的应用。

 

        .NET MAUI 是一款开放源代码应用,是 Xamarin.Forms 的进化版,从移动场景扩展到了桌面场景,并从头重新生成了 UI 控件,以提高性能和可扩展性。 如果以前使用过 Xamarin.Forms 来生成跨平台用户界面,那么你会注意到它与 .NET MAUI 有许多相似之处。 但也有一些差异。 通过使用 .NET MAUI,可使用单个项目创建多平台应用,但如果有必要,可以添加特定于平台的源代码和资源。 .NET MAUI 的主要目的之一是使你能够在单个代码库中实现尽可能多的应用逻辑和 UI 布局。 

.NET MAUI 适合哪些用户

.NET MAUI 适用于以下开发人员:

  • 基于 Visual Studio 中的单一共享代码库,使用 XAML 和 C# 编写跨平台应用。
  • 跨平台共享 UI 布局和设计。
  • 跨平台共享代码、测试和业务逻辑。

.NET MAUI 如何运作

.NET MAUI 将 Android、iOS、macOS 和 Windows API 统一到单个 API 中,提供“编写一次就能在任何地方运行”的开发人员体验,同时还提供了对每个原生平台各个方面的深入访问。

.NET 6 或更高版本提供了一系列用于创建应用的特定于平台的框架:.NET Android、.NET iOS、.NET macOS 和 Windows UI 3 (WinUI 3) 库。 这些框架都可以访问相同的 .NET 基类库 (BCL)。 该库将底层平台的细节从代码中抽象出来。 BCL 依赖于 .NET 运行时来为代码提供执行环境。 对于 Android、iOS 和 macOS,该环境由 Mono 实现,它是 .NET 运行时的实现。 在 Windows 上,.NET CoreCLR 提供执行环境。

虽然 BCL 使在不同类型的设备上运行的应用能够共享常见的业务逻辑,但各种平台具有不同的方式来定义应用的用户界面,并且它们提供了不同的模型来指定用户界面元素如何通信和互操作。 可以使用特定于平台的适当框架(.NET Android、.NET iOS、.NET macOS 或 WinUI 3)分别为每个平台创建 UI,但此方法要求你为每个单独的设备系列维护代码库。

.NET MAUI 提供了用于为移动和桌面应用生成 UI 的单一框架。 下图显示了 .NET MAUI 应用体系结构的高级视图:

 

在 .NET MAUI 应用中,你需要编写主要与 .NET MAUI API (1) 交互的代码。 然后,.NET MAUI 直接使用本机平台 API (3)。 此外,应用代码还可以根据需要直接运用平台 API (2)。

.NET MAUI 应用可以在电脑或 Mac 上编写,并编译为本机应用包:

  • 通过 .NET MAUI 生成的 Android 应用从 C# 编译为中间语言 (IL),然后在应用启动时实时 (JIT) 编译为本机程序集。
  • 通过 .NET MAUI 生成的 iOS 应用完全是预先 (AOT) 编译的,从 C# 编译为本机 ARM 程序集代码。
  • 通过 .NET MAUI 生成的 macOS 应用使用 Mac Catalyst,这是 Apple 的一种解决方案,允许将使用 UIKit 生成的 iOS 应用移植到桌面,并根据需要使用其他 AppKit 和平台 API 对其进行扩充。
  • 通过 .NET MAUI 生成的 Windows 应用使用 Windows UI 3 (WinUI 3) 库创建面向 Windows 桌面的本机应用。

 

.NET MAUI 提供的内容

.NET MAUI 提供了一个控件集合,可用于显示数据、启动操作、指示活动、显示集合、选取数据等。 除了控件集合之外,.NET MAUI 还提供:

  • 用于设计页的精心布局引擎。
  • 用于创建丰富导航类型的多种页类型,如抽屉。
  • 对数据绑定的支持,以便实现更简洁且可维护性更高的开发模式。
  • 自定义处理程序,以增强 UI 元素的显示方式的能力。
  • 用于访问本机设备功能的跨平台 API。 这些 API 使应用能够访问设备功能,例如 GPS、加速计、电池和网络状态。 有关详细信息,请参阅用于设备功能的跨平台 API。
  • 跨平台图形功能,提供了一个画布,用于支持画图和绘制形状及图像、组合操作和图形对象转换。
  • 单一项目系统,使用多目标定位来定位 Android、iOS、macOS 和 Windows。 有关更多信息,请参阅 .NET MAUI 单一项目。
  • .NET 热重载可帮助在应用运行时修改 XAML 和托管源代码,然后无需重新生成应用就能观察修改结果。 有关详细信息,请参阅 .NET 热重载。

针对设备功能的跨平台 API

.NET MAUI 提供针对本机设备功能的跨平台 API。 .NET MAUI 提供的用于访问设备功能的功能示例包括:

  • 访问传感器,例如设备上的加速计、指南针和陀螺仪。
  • 能够检查设备的网络连接状态并检测更改。
  • 提供有关运行应用的设备的信息。
  • 在应用之间将文本复制并粘贴到系统剪贴板。
  • 从设备中选择一个或多个文件。
  • 将数据安全地存储为键/值对。
  • 利用内置的文本转语音引擎从设备读取文本。
  • 启动基于浏览器的身份验证流,以侦听对注册到应用的特定 URL 的回调。

单个项目

.NET MAUI 单一项目融合了开发应用时通常会遇到的特定于平台的开发体验,并将其抽象化为可面向 Android、iOS、macOS 和 Windows 的单一共享项目。

无论面向的平台是什么,.NET MAUI 单一项目都能提供简化且一致的跨平台开发体验。 .NET MAUI 单一项目提供以下功能:

  • 一个可面向 Android、iOS、macOS 和 Windows 的共享项目。
  • 经简化的用于运行 .NET MAUI 应用的调试目标选择。
  • 单一项目内的共享资源文件。
  • 指定应用标题、ID 和版本的单个应用清单。
  • 根据需要访问特定于平台的 API 和工具。
  • 单一跨平台应用入口点。

.NET MAUI 单一项目是利用多目标方法实现的,并且使用了 SDK 样式项目。 有关 .NET MAUI 单一项目的详细信息,请参阅 .NET MAUI 单一项目。

热重载

.NET MAUI 包括对 .NET 热重载的支持,允许在应用运行时修改应用托管的源代码,而无需手动暂停或命中断点。 然后,可以将代码编辑应用于正在运行的应用,而无需重新编译。

.NET MAUI 还包括对 XAML 热重载的支持,允许保存 XAML 文件并查看正在运行的应用中反映的更改,而无需重新编译。 此外,导航状态和数据将会被保留,让你能够快速迭代 UI,而不会丢失已在应用中完成的进度。

 

 

 


http://www.ppmy.cn/ops/27236.html

相关文章

讯饶科技 X2Modbus 敏感信息泄露

讯饶科技 X2Modbus 敏感信息泄露 文章目录 讯饶科技 X2Modbus 敏感信息泄露漏洞描述影响版本实现原理漏洞复现修复建议 漏洞描述 X2Modbus是一款功能很强大的协议转换网关, 这里的X代表各家不同 的通信协议,2是To的谐音表示转换,Modbus就是最…

密码学python库PBC安装使用

初始化 使用环境云服务器(移动云可以免费使用一个月) 选择ubuntu18.04-64位 第一次进入linux命令行之后是没有界面显示的,需要在命令行下载。 这里按照其他云平台操作即可:Ubuntu18.04 首次使用配置教程(图形界面安装) 记录好登录…

状态模式

文章目录 1.UML类图2.状态基类3.状态实现类3.状态机管理类使用示例 1.UML类图 2.状态基类 public abstract class State {public string? Name { get; set; }public StateMachine? StateMachine {get; set;}public abstract void Exit();public abstract void Enter(); }3.…

网络安全-Diffie Hellman密钥协商

密钥协商是保密通信双方(或更多方)通过公开信道来共同形成密钥的过程。一个密钥协商方案中,密钥的值是某个函数值,其输入量由两个成员(或更多方)来提供。密钥协商的记过是参与协商的双方(或更多…

微信小程序播放编码为 video/mp4;codecs=vp8 opus 的视频没有声音

最近在做浏览器录屏功能,主要是录屏加上麦克风生成mp4视频,最终生成的是编码为 video/mp4;codecsvp8 opus 的视频,音频编码因为是 opus 是无法在小程序正常播放的,这样就导致了视频没有声音。后来就在服务端做了一层转换&#xff…

网络应用层之(6)L2TP协议详解

网络应用层之(6)L2TP协议 Author: Once Day Date: 2024年5月1日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:通信网络技术_Once-Day的…

5G前传光纤传输的25G光模块晶振SG2016CAN

一款适用于5G前传光纤传输网络中的25G光模块的5G晶振SG2016CAN。随着5G时代的到来,5G晶振的重要性也不言而喻,小体积宽温晶振SG2016CAN可以用于5G前传的25G光模块,具有高稳定性、小体积、宽温等优势。在5G前传光纤传输网络中,25G光…

代码随想录学习Day 32

738.单调递增的数字 题目链接 讲解链接 暴力解法: class Solution:def check(self, n): # 判断是否各位单调递增max 10while n:x n % 10if max > x:max xelse:return Falsen n // 10return Truedef monotoneIncreasingDigits(self, n: int) -> int:f…