里程碑事件丨.NET MAUI 正式釋出

微軟技術棧發表於2022-06-03

歡迎使用 .NET 多平臺應用程式 UI。 此版本標誌著我們在統一 .NET 平臺的多年旅程中的新里程碑。 現在,您和超過 500 萬其他 .NET 開發人員擁有面向 Android、iOS、macOS 和 Windows 的一流跨平臺 UI 堆疊,以補充 .NET 工具鏈 (SDK) 和基類庫 (BCL)。 您可以使用 .NET 構建任何東西。

加入我們的 Microsoft Build 2022,我們將向您介紹所有更新,以便使用 .NET 和 Visual Studio 為任何裝置構建本機應用程式,學習更多

這只是我們建立令 .NET 開發人員滿意的桌面和移動應用程式體驗之旅的開始。 對於下一階段,現在為更廣泛的 .NET 生態系統奠定了基礎,將 .NET Framework 和舊專案系統中的外掛、庫和服務引入 .NET 6 和 SDK 樣式專案。 今天可用的有:



image.png

如需幫助將庫遷移到 .NET 6,請檢視最近的部落格文章,詳細介紹了 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。

原生 UI,不妥協

.NET MAUI 的主要目標是讓您能夠交付每個平臺(Android、iOS、macOS 和 Windows)專門設計的最佳應用體驗,同時讓您能夠通過豐富的樣式和圖形打造一致的品牌體驗。 開箱即用,每個平臺的外觀和行為都符合其應有的方式,無需任何額外的小部件或樣式來模仿。 例如,Windows 上的 .NET MAUI 由 WinUI 3 提供支援,WinUI 3Windows App SDK 附帶的主要本機 UI 元件。

使用 C# 和 XAML 從包含 40 多個控制元件、佈局和頁面的豐富工具包構建您的應用程式。 在移動控制元件的 Xamarin 肩膀上,.NET MAUI 增加了對多視窗桌面應用程式、選單欄和新動畫功能、邊框、角落、陰影、圖形等的支援。 哦,還有我將在下面重點介紹的新 BlazorWebView。

閱讀 .NET MAUI 文件中有關控制元件的更多資訊:頁面、佈局和檢視

可訪問性優先

使用原生 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 文件中有關使用處理程式自定義控制元件的更多資訊

現代開發人員生產力

.NET 不僅僅是一種可以構建任何東西的技術,我們還希望 .NET 能夠使用通用語言特性、模式和實踐以及工具來提高您的生產力。

.NET MAUI 使用 .NET 6 中引入的新 C# 10 功能,包括全域性 using 語句和檔案範圍名稱空間 - 非常有助於減少檔案中的混亂和雜亂。 .NET MAUI 以“單一專案”為重點,將多目標提升到了一個新的水平。

在新的 .NET MAUI 專案中,平臺位於一個子資料夾中,將重點放在您花費大部分精力的應用程式上。 在專案的 Resources 資料夾中,您可以在一個地方管理應用程式的字型影像應用程式圖示啟動螢幕、原始資源和樣式。 .NET MAUI 將針對每個平臺的獨特需求進行優化。

 

 多專案vs單專案: 仍然支援為每個平臺使用單獨的專案來構建您的解決方案,因此您可以選擇單專案方法來開發您的應用程式。

.NET MAUI 使用在 ASP.NET 和 Blazor 應用程式中流行於 Microsoft.Extensions 庫的構建器模式作為初始化和配置應用程式的單一位置。 從這裡,您可以為 .NET MAUI 提供您的字型、利用平臺特定的生命週期事件、配置依賴項、啟用特定功能、啟用供應商控制工具包等。

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>();
#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 文件中閱讀有關使用 MauiProgram單個專案啟動應用程式的更多資訊。

將 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 應用程式。

或者,將 BlazorWebView 控制元件新增到現有的 .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 專為提高效能而設計。您已經告訴我們,讓您的應用程式儘快啟動非常重要,尤其是在 Android 上。.NET MAUI 中的 UI 控制元件在本機平臺控制元件上實現了一種精簡的、解耦的處理程式對映器模式。這減少了 UI 渲染中的層數,並簡化了控制元件定製。

.NET MAUI 中的佈局已被設計為使用一致的管理器模式來優化度量並安排迴圈以更快地呈現和更新您的 UI。除了 StackLayout 之外,我們還展示了針對特定場景進行預優化的佈局,例如 HorizontalStackLayout 和 VerticalStackLayout。

從這個旅程的一開始,我們就設定了一個目標,即在過渡到 .NET 6 時提高啟動效能並保持或減小應用程式大小。在 GA 時,我們已經實現了 34.9% 的 .NET MAUI 和 39.4 改進.NET for Android 的改進百分比。這些收益也擴充套件到複雜的應用程式;.NET Podcast 示例應用程式的啟動時間為 1299 毫秒,GA 時為 814.2 毫秒,自 Preview 13 以來提高了 37.3%。

預設情況下啟用這些設定以提供具有這些優化的釋出版本。

請繼續關注我們為實現這些結果所做的深入部落格文章。

今天開始

要開始在 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 年。

資源

我們需要您的反饋

我們很樂意聽取您的意見!當您遇到任何問題時,請在 GitHub 上的 dotnet/maui 上提交報告。

概括

藉助 .NET MAUI,您可以使用在 .NET 中實踐的相同生產力模式,從單個程式碼庫構建適用於 Android、iOS、macOS 和 Windows 的本機應用程式。 .NET MAUI 的瘦且分離的 UI 和佈局架構以及單個專案功能使您能夠專注於一個應用程式,而不是同時兼顧多個平臺的獨特需求。藉助 .NET 6,我們不僅為 Android 提供了效能改進,而且還針對所有平臺目標進行了改進。

更少的平臺程式碼、更多的共享程式碼、一致的標準和模式、輕量級和高效能架構、移動和桌面原生體驗——這僅僅是開始。我們期待在接下來的幾個月中看到庫和更廣泛的生態系統與 .NET MAUI 一起為 .NET 開發人員定義跨平臺應用程式開發的新時代,使您和您的組織能夠實現更多目標。

關注微軟中國MSDN瞭解更多  

.NET MAUI

相關文章