官宣!微軟跨平臺 UI 框架 .NET MAUI 6 正式發(fā)布!
關(guān)注我們
翻譯:Wendy Zang
校驗:李衛(wèi)涵 - 微軟 MVP;朱震 - 微軟 MVP
排版:Rani Sun
歡迎使用 .NET 多平臺應(yīng)用程序 UI。此版本標志著我們在統(tǒng)一 .NET 平臺的多年旅程中的新里程碑。現(xiàn)在,您和超過 500 萬其他 .NET 開發(fā)人員擁有面向 Android、iOS、macOS 、Windows和Linux(由Github開源社區(qū)支持) 的一流跨平臺 UI 技術(shù)棧,以補充 .NET 工具鏈 (SDK) 和基礎(chǔ)類庫 (BCL)。您可以使用 .NET 構(gòu)建任何東西。
加入我們的 Microsoft Build 2022,我們將向您介紹所有更新,以便使用 .NET 和 Visual Studio 為任何設(shè)備構(gòu)建本機應(yīng)用程序。
這只是我們創(chuàng)建令 .NET 開發(fā)人員滿意的桌面和移動應(yīng)用程序體驗之旅的開始。對于下一階段,現(xiàn)在為更廣泛的 .NET 生態(tài)系統(tǒng)奠定了基礎(chǔ),將 .NET Framework 和舊項目系統(tǒng)中的插件、庫和服務(wù)引入 .NET 6 和 SDK 樣式項目。今天可用的有:





如需幫助將庫遷移到 .NET 6,請查看最近的客座博客文章,詳細介紹了 Michael Rumpler (MR.Gestures) 和 Luis Matos (Plugin.ValidationRules) 遷移到 .NET MAUI 庫的體驗。
當前 18 個月的發(fā)布計劃完全支持 .NET MAUI 工作負載,并將按照與 .NET 相同的節(jié)奏提供服務(wù)。我們對 .NET MAUI 的持續(xù)關(guān)注仍然是質(zhì)量、解決已知問題并根據(jù)您的反饋確定問題的優(yōu)先級。這還包括我們?yōu)闃?gòu)建專門針對 Android、Android Wear、CarPlay、iOS、macOS 和 tvOS 的應(yīng)用程序而交付的工作負載,這些應(yīng)用程序直接使用來自 .NET 的本機工具包,以及支持庫 AndroidX、Facebook、Firebase、Google Play Services 和 Skiasharp。
使用 .NET MAUI,您可以實現(xiàn)不折不扣的用戶體驗,同時共享比以往更多的代碼。.NET MAUI 通過每個平臺提供的主要應(yīng)用工具包、現(xiàn)代開發(fā)人員生產(chǎn)力和我們迄今為止最快的移動平臺使用本機 UI。
.NET 多平臺應(yīng)用程序 UI
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
多年旅程中
https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/
Github開源社區(qū)
https://github.com/jsuarezruiz/maui-linux
Microsoft Build 2022
https://mybuild.microsoft.com/sessions/599c82b6-0c5a-4add-9961-48b85d9ffde0?source=sessions
Michael Rumpler
https://devblogs.microsoft.com/xamarin/migrating-mrgestures-to-dotnet-maui/
Luis Matos
https://devblogs.microsoft.com/xamarin/tips-for-porting-your-xamarin-library-to-dotnet-maui/
當前 18 個月的發(fā)布計劃
https://dotnet.microsoft.com/platform/support/policy
已知問題
https://github.com/dotnet/maui/6.0/known-issues.md
原生 UI,不妥協(xié)
.NET MAUI 的主要目標是讓您能夠交付每個平臺(Android、iOS、macOS 和 Windows)專門設(shè)計的最佳應(yīng)用體驗,同時讓您能夠通過豐富的樣式和圖形打造一致的品牌體驗。開箱即用,每個平臺的外觀和行為都符合其應(yīng)有的方式,無需任何額外的小部件或樣式來模仿。例如,Windows 上的 .NET MAUI 由 WinUI 3 提供支持,WinUI 3 是 Windows App SDK 附帶的主要本機 UI 組件。

使用 C# 和 XAML 從包含 40 多個控件、布局和頁面的豐富工具包構(gòu)建您的應(yīng)用程序。在移動控件的 Xamarin 肩膀上,.NET MAUI 增加了對多窗口桌面應(yīng)用程序、菜單欄和新動畫功能、邊框、角落、陰影、圖形等的支持。哦,還有我將在下面重點介紹的新 BlazorWebView。

閱讀 .NET MAUI 文檔中有關(guān)控件的更多信息:頁面、布局和視圖。
WinUI 3
https://docs.microsoft.com/windows/apps/winui/winui3
Windows App SDK
https://docs.microsoft.com/windows/apps/windows-app-sdk
新動畫功能
https://docs.microsoft.com/dotnet/maui/user-interface/animation/basic
文檔中有關(guān)控件的更多信息:頁面、布局和視圖
https://docs.microsoft.com/dotnet/maui/user-interface/controls/
可訪問性優(yōu)先
使用原生 UI 的一個主要優(yōu)勢是繼承的可訪問性支持,我們可以在語義服務(wù)的基礎(chǔ)上構(gòu)建它,從而比以往更容易創(chuàng)建高度可訪問的應(yīng)用程序。我們與客戶密切合作,重新設(shè)計我們開發(fā)可訪問性的方式。從這些對話中,我們設(shè)計了 .NET MAUI 可訪問性語義服務(wù)來控制:
描述、提示和標題級別等屬性
聚焦
屏幕閱讀器
自動化屬性
閱讀 .NET MAUI 文檔中有關(guān)可訪問性語義服務(wù)的更多信息。
可訪問性語義服務(wù)
https://docs.microsoft.com/dotnet/maui/fundamentals/accessibility
超越用戶界面
.NET MAUI 提供簡單的 API 來訪問每個平臺的服務(wù)和功能,例如加速度計、應(yīng)用程序操作、文件系統(tǒng)、通知等等。在此示例中,我們配置“應(yīng)用程序操作”,為每個平臺上的應(yīng)用程序圖標添加菜單選項:
AppActions.SetAsync(new AppAction("current_info", "Check Current Weather", icon: "current_info"),new AppAction("add_location", "Add a Location", icon: "add_location"));

閱讀 .NET MAUI 文檔中有關(guān)訪問平臺服務(wù)和功能的更多信息。
訪問平臺服務(wù)和功能
https://docs.microsoft.com/en-gb/dotnet/maui/
輕松定制
無論您是擴展 .NET MAUI 控件的功能還是建立新的平臺功能,.NET MAUI 的架構(gòu)都具有可擴展性,因此您永遠不會碰壁。舉個例子,Entry 控件——一個在一個平臺上呈現(xiàn)不同的控件的規(guī)范示例。Android 會在文本字段下方繪制下劃線,開發(fā)人員通常希望刪除該下劃線。使用 .NET MAUI,自定義整個項目中的每個條目只需幾行代碼:
Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>{h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());});

這是最近由 Cayas Software 創(chuàng)建新地圖平臺控件的一個很好的示例。博客文章演示了為控件創(chuàng)建處理程序、為每個平臺實現(xiàn),然后通過在 .NET MAUI 中注冊控件來使其可用。
.ConfigureMauiHandlers(handlers =>{handlers.AddHandler(typeof(MapHandlerDemo.Maps.Map),typeof(MapHandler));})

閱讀 .NET MAUI 文檔中有關(guān)使用處理程序自定義控件的更多信息。
示例
https://www.cayas.de/blog/dotnet-maui-custom-map-handler
使用處理程序自定義控件
https://docs.microsoft.com/dotnet/maui/user-interface/handlers/customize
現(xiàn)代開發(fā)人員生產(chǎn)力
.NET 不僅僅是一種可以構(gòu)建任何東西的技術(shù),我們還希望 .NET 能夠使用通用語言特性、模式和實踐以及工具來提高您的生產(chǎn)力。
.NET MAUI 使用 .NET 6 中引入的新 C# 10 功能,包括全局 using 語句和文件范圍命名空間 - 非常有助于減少文件中的混亂和雜亂。.NET MAUI 以“單一項目”為重點,將多目標提升到了一個新的水平。

在新的 .NET MAUI 項目中,平臺位于一個子文件夾中,將重點放在您花費大部分精力的應(yīng)用程序上。在項目的 Resources 文件夾中,您可以在一個地方管理應(yīng)用程序的字體、圖像、應(yīng)用程序圖標、啟動屏幕、原始資源和樣式。.NET MAUI 將針對每個平臺的獨特需求進行優(yōu)化。
一個地方
https://docs.microsoft.com/dotnet/maui/fundamentals/single-project
字體
https://docs.microsoft.com/dotnet/maui/user-interface/fonts
圖像
https://docs.microsoft.com/dotnet/maui/user-interface/images/images
應(yīng)用程序圖標
https://docs.microsoft.com/dotnet/maui/user-interface/images/app-icons?tabs=android
啟動屏幕
https://docs.microsoft.com/dotnet/maui/user-interface/images/splashscreen?tabs=android

多項目vs單項目: 仍然支持為每個平臺使用單獨的項目來構(gòu)建您的解決方案,因此您可以選擇單項目方法來開發(fā)您的應(yīng)用程序。
.NET MAUI 使用在 ASP.NET 和 Blazor 應(yīng)用程序中流行于 Microsoft.Extensions 庫的構(gòu)建器模式作為初始化和配置應(yīng)用程序的單一位置。從這里,您可以為 .NET MAUI 提供您的字體、利用平臺特定的生命周期事件、配置依賴項、啟用特定功能、啟用供應(yīng)商控制工具包等。
public static class MauiProgram{public static MauiApp CreateMauiApp(){var builder = MauiApp.CreateBuilder();builder.UseMauiApp<App>().ConfigureServices().ConfigureFonts(fonts =>{fonts.AddFont("Segoe-Ui-Bold.ttf", "SegoeUiBold");fonts.AddFont("Segoe-Ui-Regular.ttf", "SegoeUiRegular");fonts.AddFont("Segoe-Ui-Semibold.ttf", "SegoeUiSemibold");fonts.AddFont("Segoe-Ui-Semilight.ttf", "SegoeUiSemilight");});return builder.Build();}}
public static class ServicesExtensions{public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder){builder.Services.AddMauiBlazorWebView();builder.Services.AddSingleton<SubscriptionsService>();builder.Services.AddSingleton<ShowsService>();builder.Services.AddSingleton<ListenLaterService>();builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Windows.NativeAudioService>();builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Android.NativeAudioService>();builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.MacCatalyst.NativeAudioService>();builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>();builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.iOS.NativeAudioService>();builder.Services.TryAddTransient<WifiOptionsService>();builder.Services.TryAddSingleton<PlayerService>();builder.Services.AddScoped<ThemeInterop>();builder.Services.AddScoped<ClipboardInterop>();builder.Services.AddScoped<ListenTogetherHubClient>(_ =>new ListenTogetherHubClient(Config.ListenTogetherUrl));return builder;}}
在 .NET MAUI 文檔中閱讀有關(guān)使用 MauiProgram 和單個項目啟動應(yīng)用程序的更多信息。
使用 MauiProgram
https://docs.microsoft.com/dotnet/maui/fundamentals/app-startup
單個項目
https://docs.microsoft.com/dotnet/maui/fundamentals/single-project
將 Blazor 帶入桌面和移動設(shè)備
.NET MAUI 也非常適合希望通過本機客戶端應(yīng)用程序參與其中的 Web 開發(fā)人員。.NET MAUI 與 Blazor 集成,因此您可以直接在本機移動和桌面應(yīng)用程序中重用現(xiàn)有的 Blazor Web UI 組件。借助 .NET MAUI 和 Blazor,您可以重用您的 Web 開發(fā)技能來構(gòu)建跨平臺的本機客戶端應(yīng)用程序,并構(gòu)建跨移動、桌面和 Web 的單一 UI。

.NET MAUI 在設(shè)備上本地執(zhí)行 Blazor 組件(不需要 WebAssembly)并將它們呈現(xiàn)到嵌入式 Web 視圖控件。因為您的 Blazor 組件在 .NET 進程中編譯和執(zhí)行,所以它們不限于 Web 平臺,并且可以利用任何本機平臺功能,例如通知、藍牙、地理位置和傳感器、文件系統(tǒng)等等。您甚至可以在 Blazor Web UI 旁邊添加本機 UI 控件。這是一種全新的混合應(yīng)用程序:Blazor Hybrid!
開始使用 .NET MAUI 和 Blazor 很簡單:只需使用隨附的 .NET MAUI Blazor 應(yīng)用程序項目模板。

此模板已全部設(shè)置好,因此您可以開始使用 HTML、CSS 和 C# 構(gòu)建 .NET MAUI Blazor 應(yīng)用程序。.NET MAUI 的 Blazor Hybrid 教程將引導(dǎo)您構(gòu)建和運行您的第一個 .NET MAUI Blazor 應(yīng)用程序。
或者,將 BlazorWebView 控件添加到現(xiàn)有的 .NET MAUI 應(yīng)用程序,無論您想在哪里開始使用 Blazor 組件:
<BlazorWebView HostPage="wwwroot/index.html"><BlazorWebView.RootComponents><RootComponent Selector="#app" ComponentType="{x:Type my:Counter}" /></BlazorWebView.RootComponents></BlazorWebView>
Blazor Hybrid 支持現(xiàn)在也可用于 WPF 和 Windows 窗體,因此您可以開始對現(xiàn)有桌面應(yīng)用程序進行現(xiàn)代化改造以在 Web 上運行或使用 .NET MAUI 跨平臺運行。適用于 WPF 和 Windows 窗體的 BlazorWebView 控件在 NuGet 上可用。查看 WPF 和 Windows 窗體的 Blazor Hybrid 教程,了解如何開始。
若要詳細了解 Blazor Hybrid 對 .NET MAUI、WPF 和 Windows 窗體的支持,請查看 Blazor Hybrid 文檔。
.NET MAUI Blazor 應(yīng)用程序
https://docs.microsoft.com/aspnet/core/blazor/hybrid/tutorials/maui
BlazorWebView 控件添加到現(xiàn)有的 .NET MAUI 應(yīng)用程序
https://docs.microsoft.com/aspnet/core/blazor/hybrid/tutorials/maui
WPF 和 Windows 窗體
https://docs.microsoft.com/aspnet/core/blazor/hybrid/tutorials/windows-forms
Blazor Hybrid 教程
https://docs.microsoft.com/aspnet/core/blazor/hybrid
Linux平臺的支持(Github開源社區(qū)支持)
項目地址:https://github.com/jsuarezruiz/maui-linux
基于 GtkSharp 添加 Linux 支持

針對速度進行了優(yōu)化
.NET MAUI 專為提高性能而設(shè)計。您已經(jīng)告訴我們,讓您的應(yīng)用程序盡快啟動非常重要,尤其是在 Android 上。.NET MAUI 中的 UI 控件在本機平臺控件上實現(xiàn)了一種精簡的、解耦的處理程序映射器模式。這減少了 UI 渲染中的層數(shù),并簡化了控件定制。
.NET MAUI 中的布局已被設(shè)計為使用一致的管理器模式來優(yōu)化度量并安排循環(huán)以更快地呈現(xiàn)和更新您的 UI。除了 StackLayout 之外,我們還展示了針對特定場景進行預(yù)優(yōu)化的布局,例如 HorizontalStackLayout 和 VerticalStackLayout。
從這個旅程的一開始,我們就設(shè)定了一個目標,即在過渡到 .NET 6 時提高啟動性能并保持或減小應(yīng)用程序大小。在 GA 時,我們已經(jīng)實現(xiàn)了 34.9% 的 .NET MAUI 和 39.4 改進.NET for Android 的改進百分比。這些收益也擴展到復(fù)雜的應(yīng)用程序; .NET Podcast 示例應(yīng)用程序的啟動時間為 1299 毫秒,GA 時為 814.2 毫秒,自 Preview 13 以來提高了 37.3%。
默認情況下啟用這些設(shè)置以提供具有這些優(yōu)化的發(fā)布版本。

請繼續(xù)關(guān)注我們?yōu)閷崿F(xiàn)這些結(jié)果所做的深入博客文章。
.NET Podcast 示例應(yīng)用程序
https://docs.microsoft.com/dotnet/maui/fundamentals/accessibility
今天開始
要開始在 Windows 上使用 .NET MAUI,請安裝 Visual Studio 2022 Preview 或?qū)⑵涓碌桨姹?17.3 Preview 1.1。在安裝程序中,選擇工作負載“.NET Multi-platform App UI development”。

要在 Mac 上使用 .NET MAUI,請安裝適用于 Mac 的新 Visual Studio 2022 預(yù)覽版(17.3 預(yù)覽版 1)。
Visual Studio 2022 將在今年晚些時候支持 GA .NET MAUI 工具。在今天的 Windows 上,您可以使用 XAML 和 .NET Hot Reload 以及用于 XAML、C#、Razor 和 CSS 等的強大編輯器來加速您的開發(fā)循環(huán)。使用 XAML 實時預(yù)覽和實時可視樹,您可以預(yù)覽、對齊、檢查您的 UI,并在調(diào)試時對其進行編輯。.NET MAUI 的新單項目體驗現(xiàn)在包括項目屬性頁,可提供可視化編輯體驗,以便為您的應(yīng)用配置多平臺定位。
在 Mac 上,您現(xiàn)在可以加載單項目和多項目 .NET MAUI 解決方案,以使用漂亮的全新原生 Visual Studio 2022 for Mac 體驗進行調(diào)試。用于提高您開發(fā) .NET MAUI 應(yīng)用程序的生產(chǎn)力的其他功能將在后續(xù)預(yù)覽版中提供。
我們建議立即開始將您的庫更新為 .NET MAUI 并創(chuàng)建新的 .NET MAUI 項目。在深入研究將 Xamarin 項目轉(zhuǎn)換為 .NET MAUI 之前,請查看您的依賴項、Visual Studio 對 .NET MAUI 的支持狀態(tài)以及已發(fā)布的已知問題,以確定轉(zhuǎn)換的正確時間。請記住,現(xiàn)代生命周期策略將繼續(xù)支持 Xamarin,該策略規(guī)定距上一個主要版本 2 年。
請安裝 Visual Studio 2022 Preview
https://aka.ms/vs2022preview
新 Visual Studio 2022 預(yù)覽版(17.3 預(yù)覽版 1)
https://visualstudio.microsoft.com/vs/mac/preview/
現(xiàn)代生命周期策略
https://dotnet.microsoft.com/platform/support/policy/xamarin
資源
.NET MAUI – 研討會
https://github.com/dotnet-presentations/dotnet-maui-workshop
構(gòu)建您的第一個 .NET MAUI 應(yīng)用程序
https://dotnet.microsoft.com/learn/maui/first-app-tutorial/intro
文檔
https://docs.microsoft.com/dotnet/maui
已知的問題
https://github.com/dotnet/maui/wiki/Known-Issues
微軟學(xué)習(xí)路徑
https://docs.microsoft.com/learn/paths/build-apps-with-dotnet-maui/
問答論壇
https://docs.microsoft.com/answers/topics/dotnet-maui.html
發(fā)行說明
https://github.com/dotnet/maui/releases/tag/6.0.312
示例
https://github.com/dotnet/maui-samples
支持政策 – .NET MAUI
https://dotnet.microsoft.com/platform/support/policy/maui
支持政策 – Xamarin
https://dotnet.microsoft.com/platform/support/policy/xamarin
我們需要您的反饋
我們很樂意聽取您的意見!當您遇到任何問題時,請在 GitHub 上的 dotnet/maui 上提交報告。
dotnet/maui
https://github.com/dotnet/maui/issues/new/choose
概括
借助 .NET MAUI,您可以使用在 .NET 中實踐的相同生產(chǎn)力模式,從單個代碼庫構(gòu)建適用于 Android、iOS、macOS 和 Windows 的本機應(yīng)用程序。.NET MAUI 的瘦且分離的 UI 和布局架構(gòu)以及單個項目功能使您能夠?qū)W⒂谝粋€應(yīng)用程序,而不是同時兼顧多個平臺的獨特需求。借助 .NET 6,我們不僅為 Android 提供了性能改進,而且還針對所有平臺目標進行了改進。
更少的平臺代碼、更多的共享代碼、一致的標準和模式、輕量級和高性能架構(gòu)、移動和桌面原生體驗——這僅僅是開始。我們期待在接下來的幾個月中看到庫和更廣泛的生態(tài)系統(tǒng)與 .NET MAUI 一起為 .NET 開發(fā)人員定義跨平臺應(yīng)用程序開發(fā)的新時代,使您和您的組織能夠?qū)崿F(xiàn)更多目標。
