官宣新聞
歡迎使用 .NET多平臺應用程序UI(.NET MAUI)。此版本標誌着我們在統一.NET平臺的多年旅程中的新里程碑。現在,您和超過500萬其他.NET開發人員擁有面向Android、iOS、macOS、Windows和Linux(由Github開源社區支持)的一流跨平臺UI技術棧,以補充.NET工具鏈(SDK)和基礎類庫(BCL)。您可以使用.NET構建任何東西。
加入我們的Microsoft Build 2022,我們將向您介紹所有更新,以便使用.NET和Visual Studio爲任何設備構建本機應用程序。
這只是我們創建令.NET開發人員滿意的桌面和移動應用程序體驗之旅的開始。對於下一階段,現在爲更廣泛的.NET生態系統奠定了基礎,將.NET Framework和舊項目系統中的插件、庫和服務引入.NET 6和SDK樣式項目。
今天可用的有:
- AndroidX
- AlohaKit
- CommunityToolkit.MVVM
- CommunityToolkit.Maui
- CommunityToolkit MauiCompat
- CommunityToolkit Markup.MauiCompat
- DevExpress
- FreshMvvm.Maui
- Google APIs for iOS
- Google Play Services Client Libraries
- GrialKit
- MauiAnimation
- Microsoft.Maui.Graphics
- MR.Gestures
- Prism.Maui
- Plugin.Fingerprint
- Plugin.InAppBilling
- Plugin.StoreReview
- Plugin.ValidationRules
- ReactiveUI.Maui
- Shiny
- SkiaSharp
- Syncfusion
- Telerik UI for .NET MAUI
- TemplateUI
- User Dialogs
如需幫助將庫遷移到.NET6,請查看最近的客座博客文章,詳細介紹了Michael Rumpler(MR.Gestures)和Luis Matos(Plugin.ValidationRules)遷移到.NET MAUI庫的體驗。
當前18個月的發佈計劃完全支持.NET MAUI工作負載,並將按照與.NET相同的節奏提供服務。我們對.NET MAUI的持續關注仍然是質量、解決已知問題並根據您的反饋確定問題的優先級。這還包括我們爲構建專門針對Android、Android Wear、CarPlay、iOS、macOS和tvOS的應用程序而交付的工作負載,這些應用程序直接使用來自.NET的本機工具包,以及支持庫AndroidX、Facebook、Firebase、Google Play Services和Skiasharp。
使用.NET MAUI,您可以實現不折不扣的用戶體驗,同時共享比以往更多的代碼。.NET MAUI通過每個平臺提供的主要應用工具包、現代開發人員生產力和我們迄今爲止最快的移動平臺使用本機UI。
- .NET 多平臺應用程序 UI
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack - 多年旅程中
https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/ - Github開源社區
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 個月的發佈計劃
https://dotnet.microsoft.com/platform/support/policy - 已知問題
https://github.com/dotnet/maui/6.0/known-issues.md
原生UI,不妥協
.NET MAUI的主要目標是讓您能夠交付每個平臺(Android、iOS、macOS和Windows)專門設計的最佳應用體驗,同時讓您能夠通過豐富的樣式和圖形打造一致的品牌體驗。開箱即用,每個平臺的外觀和行爲都符合其應有的方式,無需任何額外的小部件或樣式來模仿。例如,Windows上的.NET MAUI由WinUI 3提供支持,WinUI 3是Windows App SDK附帶的主要本機UI組件。
使用C#和XAML從包含40多個控件、佈局和頁面的豐富工具包構建您的應用程序。在移動控件的Xamarin肩膀上,.NET MAUI增加了對多窗口桌面應用程序、菜單欄和新動畫功能、邊框、角落、陰影、圖形等的支持。哦,還有我將在下面重點介紹的新BlazorWebView。
閱讀.NET MAUI文檔中有關控件的更多信息:頁面、佈局和視圖。
- 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 - 文檔中有關控件的更多信息:頁面、佈局和視圖
https://docs.microsoft.com/dotnet/maui/user-interface/controls/
可訪問性優先
使用原生UI的一個主要優勢是繼承的可訪問性支持,我們可以在語義服務的基礎上構建它,從而比以往更容易創建高度可訪問的應用程序。我們與客戶密切合作,重新設計我們開發可訪問性的方式。從這些對話中,我們設計了.NET MAUI可訪問性語義服務來控制:
- 描述、提示和標題級別等屬性
- 聚焦
- 屏幕閱讀器
- 自動化屬性
閱讀.NET MAUI文檔中有關可訪問性語義服務的更多信息。
超越用戶界面
.NET MAUI提供簡單的API來訪問每個平臺的服務和功能,例如加速度計、應用程序操作、文件系統、通知等等。在此示例中,我們配置“應用程序操作”,爲每個平臺上的應用程序圖標添加菜單選項:
AppActions.SetAsync(
new AppAction("current_info", "Check Current Weather", icon: "current_info"),
new AppAction("add_location", "Add a Location", icon: "add_location")
);
閱讀.NET MAUI文檔中有關訪問平臺服務和功能的更多信息。
輕鬆定製
無論您是擴展.NET MAUI控件的功能還是建立新的平臺功能,.NET MAUI的架構都具有可擴展性,因此您永遠不會碰壁。舉個例子,Entry控件——一個在一個平臺上呈現不同的控件的規範示例。Android會在文本字段下方繪製下劃線,開發人員通常希望刪除該下劃線。使用.NET MAUI,自定義整個項目中的每個條目只需幾行代碼:
#if ANDROID
Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>
{
h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());
});
#endif
這是最近由Cayas Software創建新地圖平臺控件的一個很好的示例。博客文章演示了爲控件創建處理程序、爲每個平臺實現,然後通過在.NET MAUI中註冊控件來使其可用。
.ConfigureMauiHandlers(handlers =>
{
handlers.AddHandler(typeof(MapHandlerDemo.Maps.Map),typeof(MapHandler));
})
閱讀.NET MAUI文檔中有關使用處理程序自定義控件的更多信息。
- 示例
https://www.cayas.de/blog/dotnet-maui-custom-map-handler - 使用處理程序自定義控件
https://docs.microsoft.com/dotnet/maui/user-interface/handlers/customize
現代開發人員生產力
.NET不僅僅是一種可以構建任何東西的技術,我們還希望.NET能夠使用通用語言特性、模式和實踐以及工具來提高您的生產力。
.NET MAUI使用.NET6中引入的新C# 10功能,包括全局using語句和文件範圍命名空間 - 非常有助於減少文件中的混亂和雜亂。.NET MAUI以“單一項目”爲重點,將多目標提升到了一個新的水平。
在新的.NET MAUI項目中,平臺位於一個子文件夾中,將重點放在您花費大部分精力的應用程序上。在項目的Resources文件夾中,您可以在一個地方管理應用程序的字體、圖像、應用程序圖標、啓動屏幕、原始資源和樣式。.NET MAUI將針對每個平臺的獨特需求進行優化。
- 一個地方
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 - 應用程序圖標
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單項目: 仍然支持爲每個平臺使用單獨的項目來構建您的解決方案,因此您可以選擇單項目方法來開發您的應用程序。
.NET MAUI使用在ASP.NET和Blazor應用程序中流行於Microsoft.Extensions庫的構建器模式作爲初始化和配置應用程序的單一位置。從這裏,您可以爲.NET MAUI提供您的字體、利用平臺特定的生命週期事件、配置依賴項、啓用特定功能、啓用供應商控制工具包等。
ublic 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>();
#if WINDOWS
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Windows.NativeAudioService>();
#elif ANDROID
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Android.NativeAudioService>();
#elif MACCATALYST
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.MacCatalyst.NativeAudioService>();
builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>();
#elif IOS
builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.iOS.NativeAudioService>();
#endif
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文檔中閱讀有關使用Maui Program和單個項目啓動應用程序的更多信息。
- 使用MauiProgram
https://docs.microsoft.com/dotnet/maui/fundamentals/app-startup - 單個項目
https://docs.microsoft.com/dotnet/maui/fundamentals/single-project
將Blazor帶入桌面和移動設備
.NET MAUI也非常適合希望通過本機客戶端應用程序參與其中的Web開發人員。.NET MAUI與Blazor集成,因此您可以直接在本機移動和桌面應用程序中重用現有的Blazor Web UI組件。藉助.NET MAUI和Blazor,您可以重用您的Web開發技能來構建跨平臺的本機客戶端應用程序,並構建跨移動、桌面和Web的單一UI。
.NET MAUI在設備上本地執行Blazor組件(不需要WebAssembly)並將它們呈現到嵌入式Web視圖控件。因爲您的Blazor組件在.NET進程中編譯和執行,所以它們不限於Web平臺,並且可以利用任何本機平臺功能,例如通知、藍牙、地理位置和傳感器、文件系統等等。您甚至可以在Blazor Web UI旁邊添加本機UI控件。這是一種全新的混合應用程序:Blazor Hybrid!
開始使用.NET MAUI和Blazor很簡單:只需使用隨附的.NET MAUI Blazor應用程序項目模板。
此模板已全部設置好,因此您可以開始使用HTML、CSS和C#構建.NET MAUI Blazor應用程序。.NET MAUI的Blazor Hybrid教程將引導您構建和運行您的第一個.NET MAUI Blazor應用程序。
或者,將Blazor WebView控件添加到現有的.NET MAUI應用程序,無論您想在哪裏開始使用Blazor組件:
<BlazorWebView HostPage="wwwroot/index.html">
<BlazorWebView.RootComponents>
<RootComponent Selector="#app" ComponentType="{x:Type my:Counter}" />
</BlazorWebView.RootComponents>
</BlazorWebView>
Blazor Hybrid支持現在也可用於WPF和Windows窗體,因此您可以開始對現有桌面應用程序進行現代化改造以在Web上運行或使用.NET MAUI跨平臺運行。適用於WPF和Windows窗體的BlazorWebView控件在NuGet上可用。查看WPF和Windows窗體的Blazor Hybrid教程,瞭解如何開始。
若要詳細瞭解Blazor Hybrid對.NET MAUI、WPF和Windows窗體的支持,請查看Blazor Hybrid文檔。
- .NET MAUI Blazor應用程序
https://docs.microsoft.com/aspnet/core/blazor/hybrid/tutorials/maui - BlazorWebView控件添加到現有的.NET MAUI應用程序
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開源社區支持)
項目地址:https://github.com/jsuarezruiz/maui-linux
基於GtkSharp添加Linux支持
針對速度進行了優化
.NET MAUI專爲提高性能而設計。您已經告訴我們,讓您的應用程序儘快啓動非常重要,尤其是在Android上。.NET MAUI中的UI控件在本機平臺控件上實現了一種精簡的、解耦的處理程序映射器模式。這減少了UI渲染中的層數,並簡化了控件定製。
.NET MAUI中的佈局已被設計爲使用一致的管理器模式來優化度量並安排循環以更快地呈現和更新您的UI。除了StackLayout之外,我們還展示了針對特定場景進行預優化的佈局,例如HorizontalStackLayout和VerticalStackLayout。
從這個旅程的一開始,我們就設定了一個目標,即在過渡到.NET6時提高啓動性能並保持或減小應用程序大小。在GA時,我們已經實現了34.9%的.NET MAUI和39.4改進.NET for Android的改進百分比。這些收益也擴展到複雜的應用程序;.NET Podcast示例應用程序的啓動時間爲1299毫秒,GA時爲814.2毫秒,自Preview13以來提高了37.3%。
默認情況下啓用這些設置以提供具有這些優化的發佈版本。
請繼續關注我們爲實現這些結果所做的深入博客文章。
- .NET Podcast示例應用程序
https://docs.microsoft.com/dotnet/maui/fundamentals/accessibility
今天開始
要開始在Windows上使用.NET MAUI,請安裝Visual Studio 2022 Preview或將其更新到版本17.3 Preview 1.1。在安裝程序中,選擇工作負載“.NET Multi-platform App UI development”。
要在Mac上使用.NET MAUI,請安裝適用於Mac的新Visual Studio 2022預覽版(17.3預覽版1)。
Visual Studio 2022將在今年晚些時候支持GA.NET MAUI工具。在今天的Windows上,您可以使用XAML和.NET Hot Reload以及用於XAML、C#、Razor和CSS等的強大編輯器來加速您的開發循環。使用XAML實時預覽和實時可視樹,您可以預覽、對齊、檢查您的UI,並在調試時對其進行編輯。.NET MAUI的新單項目體驗現在包括項目屬性頁,可提供可視化編輯體驗,以便爲您的應用配置多平臺定位。
在Mac上,您現在可以加載單項目和多項目.NET MAUI解決方案,以使用漂亮的全新原生Visual Studio 2022 for Mac體驗進行調試。用於提高您開發.NET MAUI應用程序的生產力的其他功能將在後續預覽版中提供。
我們建議立即開始將您的庫更新爲.NET MAUI並創建新的.NET MAUI項目。在深入研究將Xamarin項目轉換爲.NET MAUI之前,請查看您的依賴項、Visual Studio對.NET MAUI的支持狀態以及已發佈的已知問題,以確定轉換的正確時間。請記住,現代生命週期策略將繼續支持Xamarin,該策略規定距上一個主要版本2年。
- 請安裝Visual Studio 2022 Preview
https://aka.ms/vs2022preview - 新Visual Studio 2022預覽版(17.3 預覽版 1)
https://visualstudio.microsoft.com/vs/mac/preview/ - 現代生命週期策略
https://dotnet.microsoft.com/platform/support/policy/xamarin
資源
- .NET MAUI–研討會
https://github.com/dotnet-presentations/dotnet-maui-workshop - 構建您的第一個.NET MAUI應用程序
https://dotnet.microsoft.com/learn/maui/first-app-tutorial/intro - 文檔
https://docs.microsoft.com/dotnet/maui - 已知的問題
https://github.com/dotnet/maui/wiki/Known-Issues - 微軟學習路徑
https://docs.microsoft.com/learn/paths/build-apps-with-dotnet-maui/ - 問答論壇
https://docs.microsoft.com/answers/topics/dotnet-maui.html - 發行說明
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中實踐的相同生產力模式,從單個代碼庫構建適用於Android、iOS、macOS和Windows的本機應用程序。.NET MAUI的瘦且分離的UI和佈局架構以及單個項目功能使您能夠專注於一個應用程序,而不是同時兼顧多個平臺的獨特需求。藉助.NET6,我們不僅爲Android提供了性能改進,而且還針對所有平臺目標進行了改進。
更少的平臺代碼、更多的共享代碼、一致的標準和模式、輕量級和高性能架構、移動和桌面原生體驗——這僅僅是開始。我們期待在接下來的幾個月中看到庫和更廣泛的生態系統與.NET MAUI一起爲.NET開發人員定義跨平臺應用程序開發的新時代,使您和您的組織能夠實現更多目標。