现在可以使用 .NET 构建一切应用。富有生产力的 .NET 是当前数百万的开发者选择这个平台的理由。在 .NET 5 微软统一了整个 .NET 平台,将 .NET Core 和 Mono 以及基于 Mono 的 Xamarin 放在一起,于是就可以使用相同的一个 BCL 基础库和 SDK 工具链

当咱在考虑如何在 .NET 上构建一个跨平台应用的时候,需要关注的设备和系统包括 Windows 系统和设备和 Android 和 iOS 和 macOS 等。为了满足多平台开发的需求,微软改名部推出了一个新的 UI 框架叫 .NET Multi-platform App UI 简称 .NET MAUI 框架

让我们向您介绍 .NET MAUI 是什么,如何做到延续单个技术栈的经验,使用现代的开发模式,以及这项技术未来的发展趋势

什么是 .NET MAUI 框架

其实 .NET MAUI 是延续具有 6 年历史的 Xamarin.Forms 工具包的框架,可以理解为这个动作是改名部大法的行为。很多年以来,都有很多商业公司,如这个链接 https://dotnet.microsoft.com/apps/xamarin/customers 列举出来的公司,都在使用 Xamarin 用 .NET 来构建自己的业务,这对于 .NET MAUI 来说是一个特别好的开始。它在帮助小型企业最大化其 95% 以上代码共享的开发资源并击败竞争对手进入市场方面也非常成功。 .NET MAUI 将这一成功扩展到了移动设备上,从而囊括了桌面设备,这是在两者之间构建多平台应用程序的最佳方法,尤其是我们的新设备,例如新的Surface Duo 设备

使用 .NET MAUI 简化了 .NET 开发人员的技术选择,提供了一个技术栈来支持所有现代工作开发如:Android,iOS,macOS和Windows平台的开发。 每个平台和UI控件的本机功能都可以通过一个简单的跨平台API触手可及,您可以在提供不妥协的用户体验的同时共享比以前更多的代码

单一项目开发体验

.NET MAUI 的构建考虑了开发人员的生产力,包括开发人员需要的项目系统和跨平台工具。 .NET MAUI 框架将项目结构简化为一个针对多个平台的项目。 这意味着您只需单击一下鼠标,便可以轻松地将其部署到所需的任何目标,包括台式机,仿真器,模拟器或物理设备。 使用内置的跨平台资源,您可以将任何图像,字体或翻译文件添加到单个项目中,并且 .NET MAUI 将自动设置本机挂钩,以便您可以进行编码。 最后,您将始终可以访问本机底层操作系统API,在通过特定于新平台的集成可以让开发比以往更加轻松。在特定平台下,可以添加针对特定平台的代码用来访问平台相关的本地 API 接口。使用 .NET MAUI 可以让所有开发精力保持在一个地方,统一的技术栈的开发经验可以不断深耕提升生产力

如上图所示,这提供了:

  • 一个针对多个平台和设备的项目
  • 一个位置来管理字体和图像等资源
  • 多目标组织您特定于平台的代码

在 2020.05.19 这一天,微软的 Scott Hanselman 将在 Build 线上大会上的 《通往一个.NET的旅程》 这一节进行演示,来告诉大家如何使用 MAUI 让所有平台都在您的控制范围之内

现代的应用程序开发模式

.NET的愿景的一部分是在开发人员的个人喜好方面为开发人员提供选择,以便使用.NET可以提高工作效率。无论是使用哪个版本的 IDE 如 Visual Studio 2019,Visual Studio for Mac甚至是 Visual Studio Code 工具,.NET MAUI 将在所有这些版本中可用,并支持现有的MVVM和XAML模式以及将来的功能,例如使用C#构建Blazor的Model-View-Update(MVU)模式

MVVM

Model-View-ViewModel (MVVM) 和 XAML 是几十年来 .NET 客户端开发人员的主要的开发模式,这也是 .NET MAUI 中的一大特性,将在 .NET MAUI 中继续延续,以帮助您高效地构建和维护生产应用程序。

<StackLayout>
<Label Text="Welcome to .NET MAUI!" />
<Button Text="{Binding Text}"
Command="{Binding ClickCommand}" />
</StackLayout>
public Command ClickCommand { get; }

public string Text { get; set; } = "Click me";

int count = 0;

void ExecuteClickCommand ()
{
count++;
Text = $"You clicked {count} times.";
}

MVU

此外,微软支持开发人员使用 Model-View-Update (MVU) 模式开发,以及编写流畅的 C# UI 应用。MVU 是一个新的开发模式,特点是促进数据和状态管理的单向流程,以及通过仅应用必要的更改来快速更新UI的代码优先开发模式。更多关于 MVU 开发模式,请看 Elm 大佬的编程指南 https://elmprogramming.com/model-view-update-part-1.html 以及 Thomas Bandt 的 https://thomasbandt.com/model-view-update 博客

下面是用.NET MAUI编写的MVU模式的基础计数器示例。

readonly State<int> _count = 0;

[Body]
View Body() => new StackLayout
{
new Label("Welcome to .NET MAUI!"),
new Button
(
() => $"You clicked {_count} times.",
() => _count.Value ++
)
};

上面代码和官方的有些不同,不过德熙认为官方的代码也许不对

这种模式非常适合热重载,如下面所示,它具有从 C# 即时热重载新增样式,渐变和字体等功能

无论是 MVVM 还是 MVU 模式都提供相同的本机应用程序,性能和平台保真度。开发人员可以依据以及的喜好选择适合的方式

从 Xamarin.Forms 过渡到 .NET MAUI 框架

毕竟这是微软改名部大法的行动,现在 Xamarin.Forms 开发人员可以使用使用他们已经了解和喜爱的所有相同控件和API在 .NET MAUI新项目中运行。随着我们越来越接近 .NET MAUI 的发布,为了帮助开发人员将现有应用平稳地过渡到 .NET MAUI,微软打算提供类似于我们今天迁移到 .NET Core 的尝试转换支持和迁移指南

.NET MAUI 时间线

微软将在今年晚些时候开始发布 .NET MAUI 预览版,并于2021年11月开始提供 .NET 6 的总体可用性。而 .NET MAUI 将以 Xamarin.Forms 所采用的相同的6周一次的节奏进行发布。微软已经在GitHub上发布了MAUI路线图,并邀请您今天就加入咱 .NET 大阵营!

在 GitHub 上的路线图请看 https://github.com/dotnet/maui/wiki/Roadmap

Xamarin和Xamarin.Forms的未来是什么

作为咱.NET统一的一部分,Xamarin.iOS和 Xamarin.Android 将作为.NET for iOS和.NET for Android成为.NET 6的一部分。由于这些绑定是Apple和Google发行的SDK的映射,因此此处没有任何更改,但是将更新的构建工具,目标框架别名和运行时框架别名,以匹配所有其他.NET 6工作负载。微软致力于为.NET开发人员提供最新的移动SDK的最新版的支持,这是.NET MAUI的基础,并且始终如一。 当.NET 6发行时,微软期望以其当前形式发行 Xamarin SDK 的最终版本,并将提供一年的支持服务。此后的所有工作都将转移到.NET 6中

Xamarin.Forms将于今年晚些时候发布新的主版本,并继续在2021年11月通过.NET 6 GA每6周发布次要版本和服务版本。Xamarin.Forms的最终版本将在交付后的一年内提供服务,并且所有现代产品都将转移到.NET MAUI。

立即参与

通过全新的开源代码仓库 https://github.com/dotnet/maui,与全世界的 .NET 开发者一起踏上.NET MAUI的旅程。欢迎小伙伴给这个项目点星星以关注这个项目的更新和通知,也欢迎小伙伴在 Issus 上讨论。这将是合并 Xamarin 和 Xamarin.Forms 到 .NET 核心中的漫长旅程的开始,微软很高兴与您一起开放的进行开发

大佬的翻译博客:[翻译] .NET 官宣跨平台 UI 框架 MAUI - hez2010 - 博客园

官方文章请看 Introducing .NET Multi-platform App UI

dotnet Multi-platform App UI 多平台应用 UI 框架简介的更多相关文章

  1. 【Win 10应用开发】如何知道当前APP在哪个平台设备上运行

    在做Win10开发的时候,我们可能经常会需要获得当前程序在在哪个平台设备上运行,用于UI和相关API的调用,那么可以通过什么方式知道当前APP运行的平台呢? 今天这里提供两个方法给大家做参考: 方法一 ...

  2. 从0到1搭建移动App功能自动化测试平台(0):背景介绍和平台规划

    本文作者: 伯乐在线 - debugtalk .未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者. 转载地址:http://blog.jobbole.com/101221/ 背景 最近新加入DJI的 ...

  3. [转]---UAP中如何判断当前APP在哪个平台设备上运行

    在做Win10开发的时候,我们可能经常会需要获得当前程序在在哪个平台设备上运行,用于UI和相关API的调用,那么可以通过什么方式知道当前APP运行的平台呢? 今天这里提供两个方法给大家做参考: 方法一 ...

  4. Appium 从 0 到 1 搭建移动 App 功能自动化测试平台 (1):模拟器中运行 iOS 应用

    转载:https://testerhome.com/topics/4960 在上一篇文章中,我对本系列教程的项目背景进行了介绍,并对自动化测试平台的建设进行了规划. 在本文中,我将在已准备就绪的iOS ...

  5. 国内app快速生成平台对比

     泰格老虎 2013-03-07 00:39:10 这是海恒CEO高鹏写的一篇国内app快速生成平台对比文章,介绍了国内快速生成APP的平台与自己平台的对比,很有参考价值. 同类网站 安米网 http ...

  6. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  7. DeviceOne 让你一见钟情的App快速开发平台

    接触 DeviceOne 要从15年11月开始说起了,因项目和产品时间需求接触了快速开发平台,DeviceOne是非常棒的一个平台,双向数据绑定,可以自定义指令,过滤器等等.总之非常好用完全超出了我们 ...

  8. 【译】DotNet 5.4或者说 .NET平台标准

    原文:DotNet 5.4 or .NET Platform Standards 是的,你看到的确实是"DotNet 5.4".使用Visual Studio 2015 RC1 u ...

  9. Bootstrap:UI开发平台 sdk

    Bootstrap:UI开发平台 Bootstrap是一个易用.优雅.灵活.可扩展的前端工具包,里面包含了丰富的Web组件,包括布局.栅格.表格.表单.导航.按钮.进度条.媒体对象等,基于这些组件,可 ...

  10. paip.提高效率---微信 手机app快速开发平台—微网络撬动大市场

    paip.提高效率---微信 手机app快速开发平台-微网络撬动大市场   手机app快速开发平台 尤其适合crm系统,呼叫中心等业务功能...    作者Attilax  艾龙,  EMAIL:14 ...

随机推荐

  1. Install fail! SyntaxError: Unexpected token 'h', "hub.com>","... is not valid JSON (file: C:\Users\Admin\Documents\uirecorder_test\node_modules\_mocha@5.2.0@mocha\package.json)

    uirecorder初始化时解析错误: PS C:\Users\Admin\Documents\uirecorder_test> PS C:\Users\Admin\Documents\uire ...

  2. JQ实现音乐插件并自动播放

    这里分享我最近写出来的一个小东西,基于jq的音乐播放器,可以嵌套到网站 效果截图: 具体首页代码如下: <!DOCTYPE html> <html> <head> ...

  3. AXI4的主机协议代码分析

    AXI4的主机协议代码分析 一.模块分析 (1)端口列表 input wire INIT_AXI_TXN, // Asserts when ERROR is detected output reg E ...

  4. KingbaseESV8R6表空间与数据库,模式,表的关系

    自定义表空间的作用 使用多个表空间可以更灵活地执行数据库操作.当数据库具有多个表空间时,您可以: 1.将用户数据与系统表数据分开存储在不同性能的存储上,以减少I/O争用. 2.将一个应用程序的数据与另 ...

  5. kafka集群启动命令脚本文件kf.sh

    注意代码缩进 添加执行权限 chmod +x kf.sh 1 #! /bin/bash 2 case $1 in 3 "start"){ 4 for i in hadoop102 ...

  6. list集合中的实现类ArrayList

    如上图所示,list集合是 Collection 接口的子接口,它是一个元素有序(每个元素都有对应的顺序索引,第一个元素索引为0).且可重复的集合,他有三个实现类,如下: ArrayList add方 ...

  7. #换根dp#洛谷 2986 [USACO10MAR]Great Cow Gathering G

    题目 分析 处理出所有点到根节点的答案,然后换根依次求最小值 代码 #include <cstdio> #include <cctype> #define rr registe ...

  8. Windows系统自定义盘符图标

    记录一个小知识: 自定义Windows系统盘符的图标,其实这个东西很简单,就像设置U盘的图标一样 首先准备一张ico图片,如果没有ico图片,只有jpg或其他格式的,可以使用这个在线转ico的网站,把 ...

  9. .NET Aspire预览5版本 发布

    2024年4月11日发布了.NET Aspire预览5版本,这个版本引入了对AWS的支持,并对Azure功能进行了改进.重点内容包括拆分Aspire.Hosting和Aspire.Hosting.Az ...

  10. HarmonyOS跨进程通信—IPC与RPC通信开发指导

      一.IPC与RPC通信概述 基本概念 IPC(Inter-Process Communication)与RPC(Remote Procedure Call)用于实现跨进程通信,不同的是前者使用Bi ...