一次编码,无处不在:深入探讨 .NET MAUI 的跨平台魔力

.NET MAUI(多平台应用程序 UI)由 Microsoft 开发,是一个开源框架,用于为多个平台构建本机移动和桌面应用程序,包括 Android、iOS、macOS、Windows 等,并且也使用单一代码库。与 Xamarin 表单不同,开发人员必须为每个目标平台维护单独的代码库。 

.NET Framework 概述

如果您知道.NET 框架是什么以及它是如何工作的,那么您可以跳过本节并跳转到“它是如何工作的”。

.NET Framework 是 Microsoft 创建的软件开发平台。它提供了一个全面且一致的编程模型,用于跨各种 Microsoft Windows 平台(包括桌面、Web 和移动设备)构建和运行应用程序。

以下是 .NET Framework 的一些主要功能和组件:

  1. 公共语言运行时 (CLR):  CLR 是 .NET Framework 的基础。它提供内存管理、垃圾收集和异常处理等核心服务。它还支持语言互操作性,允许在同一应用程序中一起使用多种编程语言。

  2. 基类库 (BCL): BCL 是预构建的类、类型和 API 的集合,为开发人员提供了广泛的功能。它包括文件 I/O、网络、数据访问、加密、线程等类。BCL 提供可重复使用的组件,可简化应用程序开发。

  3. 语言支持: .NET Framework 支持多种编程语言,包括 C#、Visual Basic .NET (VB.NET) 和 F#。开发人员可以选择自己喜欢的语言来编写代码,并利用每种语言可用的丰富工具和库。

  4. 框架类库 (FCL): FCL 是构建在 BCL 之上的库和框架的集合。它为特定类型的应用程序提供附加功能,例如用于桌面应用程序的 Windows Presentation Foundation (WPF)、用于 Web 开发的 ASP.NET 以及用于构建面向服务的应用程序的 Windows Communication Foundation (WCF)。

  5. 部署和执行: .NET Framework 应用程序通常部署为已编译的程序集(.exe 或 .dll 文件)以及任何所需的依赖项。在运行时,程序集由 CLR 执行,CLR 即时 (JIT) 将 IL(中间语言)代码编译为本机机器指令。

.NET MAUI 的工作原理

编写 .NET MAUI 代码(主要是 C#)后,将发生以下步骤:

构建应用程序

  • 代码(包括对 BCL 类的引用)是使用 .NET 构建工具或集成开发环境 (IDE)(如Visual Studio) .

  • 在构建过程中,C# 代码会转换为中间语言 (IL) 或通用中间语言 (CIL)。该 IL 与平台无关,可以在具有兼容 .NET 运行时的任何平台上运行。

  • 我们还可以安装并启用提前编译(AOT)。如果启用此功能,则将跳过下面的步骤 2 和 3,并且 .NET MAUI 将从 IL 生成目标环境的本机代码。

  • 当 AOT 激活时,Mono 运行时用于将 .NET MAUI 代码转换为 iOS 和 Android 平台的本机代码,而 .NET CLR 用于 Windows 来实现相同的转换。

特定于平台的编译

  • 然后,IL 代码以及引用的 BCL 程序集被编译为每个目标平台的特定于平台的二进制文件。

  • 对于 Android,.NET MAUI 工具将 IL 代码和 XAML 以及任何必要的 .NET 库打包到 Android 包 (APK) 中。这是一个用于分发 Android 应用程序的存档文件。

  • 对于 iOS,Apple 不允许 JIT 在 iOS 设备上运行。因此,您将无法在 iOS 上运行您的应用程序。对于Apple,请使用提前编译。

  • 对于 Windows,IL 代码可以在运行时进行即时 (JIT) 编译,也可以使用 Windows UI 3 (WinUI 3) 库使用 .NET 本机编译器提前 (AOT) 编译为本机指令。

注意: Android 工具链(.NET for Android)和 Windows UI 3 (WinUI 3) 库是 .NET 框架(6 或更高版本)的一部分。

执行以及与 BCL 的交互

  • 已编译的应用程序以及所需的 BCL 程序集将在相应的目标平台上部署和执行。

  • 当应用程序在 Android 设备上启动时,.NET MAUI 运行时会将 IL 代码即时 (JIT) 编译为可以执行的本机机器代码。

  • 在运行时,应用程序可以与 BCL 类和 API 进行交互,利用它们的功能来执行各种任务。

  • 例如,如果您的应用程序需要读取文件,您可以利用“System.IO.File”等 BCL 类来访问文件 I/O 操作。

  • 同样,如果您的应用程序需要网络功能,您可以使用 BCL 提供的“System.Net”命名空间中的类来处理网络任务。

  • .NET MAUI 渲染引擎使用 XAML 标记为 Android 平台构建本机用户界面。

在特定于平台的编译过程中,代码中指定的任何特定于平台的资源和资产(例如图像、布局和配置文件)也包含在输出中。此外,必要的特定于平台的运行时库和依赖项与应用程序捆绑在一起,以确保它在每个目标平台上正确运行。

下图说明了前面提到的步骤:

图表是使用 Draw.io 准备的

图表是使用 Draw.io 准备的

安装和设置

我们可以使用 Visual Studio Community 版本创建 .NET MAUI 项目。从此处(https://visualstudio.microsoft.com/vs/community/)下载相同的内容。请注意,我们必须安装 2022 才能使用 .NET MAUI。该链接将下载 Visual Studio 安装程序。双击该文件运行程序,在“桌面和移动”选项下选择“.NET Multi-platform UI App”(如下图红框所示)。

桌面和移动设备

这将开始下载和安装构建移动应用程序所需的所有工具。设置完成后,您就可以开发移动应用程序了。这不是那么容易吗?打开Visual Studio社区版并单击“创建新项目”链接,如下所示:

创建一个新项目

将项目和解决方案名称命名为“MauiApp1”。

.NET MAUI 应用程序的项目结构

应用程序的典型结构如下所示:

.NET MAUI 应用程序的项目结构

让我们讨论每个文件夹及其内容。

依赖项:此文件夹包含运行和开发应用程序所需的所有必需的 SDK、NuGet 包、库和组件。

属性:它仅包含一个文件“launchSettings.json”,用于启动和调试应用程序。一般用于添加环境变量、参数等。见下面的例子:

ASPNETCORE_ENVIRONMENT

该应用程序已配置为在端口 80 上的浏览器上运行,环境变量“ASPNETCORE_ENVIRONMENT”的值为“Development”。当我们运行应用程序时,将使用带有参数“run”的命令“dotnet”。请注意,该文件最初可能非常简单。但是,随着开发的进展,我们必须经常更新文件以更改/添加配置值。

平台

此文件夹包含每个环境的子文件夹。在这些子文件夹中,我们有特定于平台的代码、资源、依赖项和配置。这种分离允许开发人员在不同平台上自定义应用程序的行为和外观,同时维护通用功能的共享代码库。

常见用法可以包括条件编译以排除或包含特定代码段、基于平台的性能优化配置以及特定于平台的测试配置。

资源

该文件夹包含各种非代码资源,例如图像、图标、样式和本地化文件。请注意,存储在这些文件夹中的资源与平台无关。这意味着相同的资源可以在不同的目标平台(iOS、Android、Windows)上使用,而无需复制文件或编写特定于平台的代码。

现在让我们看看这些独立的根级文件的用途:

  • App.xaml:此文件充当定义适用于整个应用程序的共享资源、配置和行为的中心位置。它有助于确保一致性,简化初始化和清理,并允许您有效地处理重要的生命周期事件。

  • AppShell.xaml:此文件用于定义应用程序的导航。Shell 元素中子元素的顺序决定了页面的显示顺序。

  • MainPage.xaml:此文件充当应用程序初始用户界面的画布,并提供导航和用户交互的起点。您可以在这里为应用程序的用户体验定下基调,并定义用户启动应用程序时的第一印象。例如,它可以包含 StackLayout、Grid 或relativelayout 等容器来排列各种 UI 元素,例如按钮、标签、图像和其他控件。

  • MauiProgram.cs:该文件包含主类“MauiProgram”,它作为应用程序的启动,用于配置字体、服务和其他第三方库。

总结

从本质上讲,.NET MAUI 使开发人员能够创建针对多个平台的多功能、高效且令人惊叹的应用程序,而不会影响本机性能。其项目结构、渲染引擎以及与 .NET 生态系统的无缝集成为跨平台开发的新时代奠定了基础,邀请开发人员制作让不同设备和操作系统的用户满意的应用程序。随着技术格局的不断发展,.NET MAUI 成为现代开发人员工具包中不可或缺的工具,弥合了平台多样性和代码简单性之间的差距。


文章来源地址https://www.toymoban.com/diary/apps/422.html

到此这篇关于一次编码,无处不在:深入探讨 .NET MAUI 的跨平台魔力的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/apps/422.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
使用SVG创建平行投影和等角投影的方法以及创建等轴测图
上一篇 2023年10月18日 13:58
如何以编程方式关闭/隐藏 Android 软键盘?
下一篇 2023年10月18日 23:28

相关文章

  • 开源无处不在,发展创新下又有何弊端

    随着信息技术的快速发展,开源软件已经成为软件开发的趋势,并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点,使得越来越多的企业和个人选择使用开源软件,促进了软件行业的繁荣。然而,在使用开源软件的过程中,也需要关注其可能带来的问题,如

    2024年02月20日
    浏览(43)
  • vue设置全局变量:让你的数据无处不在!

    在 vue 开发中,如何设置全局变量是一个关键问题。本文将介绍多种方法,帮助大家轻松实现全局变量的共享,提升 vue 项目的开发效率。让我们一起来探索这些方法,为你的 vue 项目带来更好的开发体验。 通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。例如,

    2024年02月08日
    浏览(43)
  • vr全景展示三大问题解析,让你的店铺无处不在

    未来互联网营销趋势走的是可视化发展路线,因此VR全景展示技术作为互联网时代新营销和宣传工具,可以让客户一目了然,提升企业品牌形象和客户信任度。vr全景展示能够给用户带来强烈视觉体验,这种沉浸感让用户可以深度参与其中,感同身受,因此作为品牌营销是非常

    2024年02月08日
    浏览(44)
  • 一键同步,无处不在的书签体验:探索多电脑Chrome书签同步插件

    平时大家都是怎么管理自己的浏览器书签数据的呢?有没有过公司和家里的电脑浏览器书签不同步的情况?有没有过电脑突然坏了但书签数据没有导出,导致书签数据丢失了?解决这些问题的方法有很多,我选择自己写个chrome插件来做书签同步。 通过 gitee 来做存取 建一个私

    2024年02月08日
    浏览(44)
  • 【观察】Akamai:向分布式云迈出坚实一步,让云和边缘“无处不在”

    近年来,云正如同日常生活中的水、电那样,融入到社会的各个层面,它不再是一种单纯的架构或者技术,而是千行百业走向数字化的核心基础设施;云也正在变成一种融合剂,无论是大数据、人工智能、物联网等,这些新的技术也正在加速融入云中;同样,今天“万物皆云

    2024年02月02日
    浏览(54)
  • 不可思议但又无处不在的漏洞,WEB安全基础入门—业务逻辑漏洞

    欢迎关注订阅专栏! WEB安全系列包括如下三个专栏: 《WEB安全基础-服务器端漏洞》 《WEB安全基础-客户端漏洞》 《WEB安全高级-综合利用》 知识点全面细致,逻辑清晰、结合实战,并配有大量练习靶场,让你读一篇、练一篇,掌握一篇,在学习路上事半功倍,少走弯路! 欢

    2024年02月02日
    浏览(43)
  • [小尘送书-第二期]《从零开始读懂量子力学》由浅入深,解释科学原理;从手机到超导,量子无处不在;从微观到宏观,遐想人生的意义!

    大家好,我是小尘,欢迎关注,一起交流学习!欢迎大家在CSDN后台私信我!一起讨论学习,讨论如何找到满意的工作! 从微小的原子到浩瀚的宇宙,从每一滴水到闪亮的钻石,从划破夜空的激光到你身边的手机……所有事物的背后都有量子力学在主宰!你看过世界级畅销书

    2024年02月15日
    浏览(46)
  • [MAUI]深入了解.NET MAUI Blazor与Vue的混合开发

    .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法,你现有项目不必重写。之前写过一篇 [MAUI] 在.NET MAUI中结合Vue实现混合开发 ,其中介绍了如何创建一个vue应用并将其打包至MAUI项目,这种方式依赖vue-cli创建和打包静态站点,好处是可以使用Node.js 的构建但

    2024年02月08日
    浏览(43)
  • 深入探讨 C# 和 .NET 中 async/await 的历史、背后的设计决策和实现细节

    对 async/await 的支持已经存在了十多年。它的出现,改变了为 .NET 编写可伸缩代码的方式,你在不了解幕后的情况下也可以非常普遍地使用该功能。 从如下所示的同步方法开始(此方法是“ 同步的 ”,因为在整个操作完成并将控制权返回给调用方之前,调用方将无法执行任何

    2024年02月08日
    浏览(42)
  • [MAUI]在.NET MAUI中实现可拖拽排序列表

    .NET MAUI 中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件。在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表。在本例中,列表中显示不同大小的磁贴(Tile)并且可以拖拽排序。 使用.NET MAU实现跨平台支持,本项目可运行于Andro

    2024年02月12日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包