Sdílet prostřednictvím


Ruční upgrade Xamarin.Forms aplikace na víceprojektovou aplikaci .NET MAUI

Upgrade víceprojektové Xamarin.Forms aplikace na víceprojektovou aplikaci .NET Multi-Platform App UI (.NET MAUI) se řídí stejným postupem jako projekt Xamarin.Android a Xamarin.iOS s dalšími kroky pro použití změn v .NET MAUI.

Tento článek popisuje, jak ručně migrovat Xamarin.Forms projekt knihovny do projektu knihovny .NET MAUI. Než to uděláte, musíte projekty platformy aktualizovat Xamarin.Forms tak, aby byly projekty ve stylu sady SDK. Projekty ve stylu sady SDK jsou stejný formát projektu používaný všemi úlohami .NET a ve srovnání s mnoha projekty Xamarin jsou mnohem méně podrobné. Informace o aktualizaci projektů aplikací najdete v tématu Upgrade projektů Xamarin.Android, Xamarin.iOS a Xamarin.Mac na projekty .NET, migrace projektů Xamarin.Android, migrace projektů Xamarin Apple a Xamarin.Forms migrace projektů UPW.

Pokud chcete migrovat Xamarin.Forms projekt knihovny do projektu knihovny .NET MAUI, musíte:

  • Aktualizujte aplikaci Xamarin.Forms tak, aby používala Xamarin.Forms 5.
  • Aktualizujte závislosti aplikace na nejnovější verze.
  • Ujistěte se, že aplikace pořád funguje.
  • Aktualizujte soubor projektu tak, aby byl ve stylu sady SDK.
  • Aktualizujte obory názvů.
  • Vyřešte všechny změny rozhraní API.
  • Nakonfigurujte .NET MAUI.
  • Upgradujte nebo nahraďte nekompatibilní závislosti verzemi .NET 8.
  • Zkompilujte a otestujte aplikaci.

Pro zjednodušení procesu upgradu byste měli vytvořit nový projekt knihovny .NET MAUI se stejným názvem jako Xamarin.Forms projekt knihovny a pak zkopírovat kód, konfiguraci a prostředky. Toto je přístup popsaný níže.

Xamarin.Forms Aktualizace aplikace

Před upgradem Xamarin.Forms aplikace na .NET MAUI byste nejprve měli aplikaci aktualizovat Xamarin.Forms tak, aby používala Xamarin.Forms 5, a ujistěte se, že stále běží správně. Kromě toho byste měli aktualizovat závislosti, které vaše aplikace používá, na nejnovější verze.

To pomůže zjednodušit zbytek procesu migrace, protože minimalizuje rozdíly Xamarin.Forms mezi rozhraním API a .NET MAUI a zajistí, že používáte kompatibilní verze .NET závislostí, pokud existují.

Vytvoření nového projektu

V sadě Visual Studio vytvořte nový projekt knihovny tříd .NET MAUI se stejným názvem jako Xamarin.Forms projekt knihovny. Tento projekt bude hostovat kód z Xamarin.Forms projektu knihovny. Otevřením souboru projektu potvrdíte, že máte projekt ve stylu sady .NET SDK:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFrameworks>net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
        <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
        <!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
        <!-- <TargetFrameworks>$(TargetFrameworks);net8.0-tizen</TargetFrameworks> -->
        <UseMaui>true</UseMaui>
        <SingleProject>true</SingleProject>
        <ImplicitUsings>enable</ImplicitUsings>

        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">11.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">13.1</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
        <TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
        <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
    </PropertyGroup>

</Project>

V projektech platformy přidejte odkaz na tento nový projekt knihovny. Potom zkopírujte Xamarin.Forms soubory knihovny do projektu knihovny .NET MAUI.

Namespace změny

Obory názvů se v přechodu Xamarin.Forms na .NET MAUI změnily a Xamarin.Essentials funkce jsou teď součástí .NET MAUI. Pokud chcete provést aktualizace oboru názvů, proveďte vyhledání a nahrazení pro následující obory názvů:

Xamarin.Forms obor názvů Obory názvů .NET MAUI
Xamarin.Forms Microsoft.Maui a Microsoft.Maui.Controls
Xamarin.Forms.DualScreen Microsoft.Maui.Controls.Foldable
Xamarin.Forms.Maps Microsoft.Maui.Controls.Maps a Microsoft.Maui.Maps
Xamarin.Forms.PlatformConfiguration Microsoft.Maui.Controls.PlatformConfiguration
Xamarin.Forms.PlatformConfiguration.AndroidSpecific Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific
Xamarin.Forms.PlatformConfiguration.AndroidSpecific.AppCompat Microsoft.Maui.Controls.PlatformConfiguration.AndroidSpecific.AppCompat
Xamarin.Forms.PlatformConfiguration.TizenSpecific Microsoft.Maui.Controls.PlatformConfiguration.TizenSpecific
Xamarin.Forms.PlatformConfiguration.WindowsSpecific Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific
Xamarin.Forms.PlatformConfiguration.iOSSpecific Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific
Xamarin.Forms.Shapes Microsoft.Maui.Controls.Shapes
Xamarin.Forms.StyleSheets Microsoft.Maui.Controls.StyleSheets
Xamarin.Forms.Xaml Microsoft.Maui.Controls.Xaml

Projekty .NET MAUI využívají implicitní global using direktivy. Tato funkce umožňuje odebrat using direktivy pro Xamarin.Essentials obor názvů, aniž byste je museli nahradit ekvivalentními obory názvů .NET MAUI.

Kromě toho se výchozí obor názvů XAML změnil z http://xamarin.com/schemas/2014/forms in Xamarin.Forms na http://schemas.microsoft.com/dotnet/2021/maui .NET MAUI. Proto byste měli nahradit všechny výskyty xmlns="http://xamarin.com/schemas/2014/forms" xmlns="http://schemas.microsoft.com/dotnet/2021/maui".

Poznámka:

Obory Xamarin.Forms názvů můžete rychle aktualizovat pomocí rychlých Microsoft.Maui akcí v sadě Visual Studio za předpokladu, že máte nainstalovaný Pomocník s upgradem.

Změny rozhraní API

Některá rozhraní API se v přechodu Xamarin.Forms na .NET MAUI změnila. To je několik důvodů, včetně odebrání duplicitních funkcí způsobených Xamarin.Essentials tím, že se stane součástí rozhraní .NET MAUI a zajistíte, aby rozhraní API dodržovala pokyny pro pojmenování .NET. Tyto změny jsou popsány v následujících částech.

Změny barev

Ve Xamarin.Formsstruktuře Xamarin.Forms.Color umožňuje vytvořit Color objekty pomocí double hodnot a poskytuje pojmenované barvy, například Xamarin.Forms.Color.AliceBlue. V rozhraní .NET MAUI byla tato funkce oddělena do Microsoft.Maui.Graphics.Color třídy a Microsoft.Maui.Graphics.Colors třídy.

Třída Microsoft.Maui.Graphics.Color v Microsoft.Maui.Graphics oboru názvů umožňuje vytvářet Color objekty pomocí float hodnot, byte hodnot a int hodnot. Třída Microsoft.Maui.Graphics.Colors , která je také v Microsoft.Maui.Graphics oboru názvů, z velké části poskytuje stejné pojmenované barvy. Slouží Colors.AliceBlue například k určení AliceBlue barvy.

Následující tabulka ukazuje změny rozhraní API mezi strukturou Xamarin.Forms.Color a Microsoft.Maui.Graphics.Color třídou:

Xamarin.Forms Rozhraní api Rozhraní .NET MAUI API Komentář
Xamarin.Forms.Color.R Microsoft.Maui.Graphics.Color.Red
Xamarin.Forms.Color.G Microsoft.Maui.Graphics.Color.Green
Xamarin.Forms.Color.B Microsoft.Maui.Graphics.Color.Blue
Xamarin.Forms.Color.A Microsoft.Maui.Graphics.Color.Alpha
Xamarin.Forms.Color.Hue Microsoft.Maui.Graphics.Color.GetHue Xamarin.Forms vlastnost nahrazena metodou v .NET MAUI.
Xamarin.Forms.Color.Saturation Microsoft.Maui.Graphics.Color.GetSaturation Xamarin.Forms vlastnost nahrazena metodou v .NET MAUI.
Xamarin.Forms.Color.Luminosity Microsoft.Maui.Graphics.Color.GetLuminosity Xamarin.Forms vlastnost nahrazena metodou v .NET MAUI.
Xamarin.Forms.Color.Default Žádný ekvivalent .NET MAUI. Microsoft.Maui.Graphics.Color Místo toho objekty ve výchozím nastavení null.
Xamarin.Forms.Color.Accent Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Color.FromHex Microsoft.Maui.Graphics.Color.FromArgb Microsoft.Maui.Graphics.Color.FromHex je zastaralý a bude odebrán v budoucí verzi.

Kromě toho jsou všechny číselné hodnoty v objektu Microsoft.Maui.Graphics.Color float, spíše než double použité v Xamarin.Forms.Color.

Poznámka:

Na rozdíl od Xamarin.Forms, Microsoft.Maui.Graphics.Color nemá implicitní převod na System.Drawing.Color.

Změny rozložení

Následující tabulka uvádí rozhraní API rozložení, která byla odebrána při přechodu Xamarin.Forms na .NET MAUI:

Xamarin.Forms Rozhraní api Rozhraní .NET MAUI API Komentáře
Xamarin.Forms.AbsoluteLayout.IAbsoluteList<T>.Add Přetížení Add , které přijímá 3 argumenty, není v .NET MAUI.
Xamarin.Forms.Grid.IGridList<T>.AddHorizontal Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Grid.IGridList<T>.AddVertical Žádný ekvivalent .NET MAUI.
Xamarin.Forms.RelativeLayout Microsoft.Maui.Controls.Compatibility.RelativeLayout V .NET MAUI existuje RelativeLayout pouze jako ovládací prvek kompatibility pro uživatele, kteří migrují z Xamarin.Forms. Místo toho použijte Grid nebo přidejte obor názvů kompatibility xmlns .

Přidání podřízených položek do rozložení v kódu Xamarin.Forms se navíc provádí přidáním podřízených položek do kolekce rozložení Children :

Grid grid = new Grid();
grid.Children.Add(new Label { Text = "Hello world" });

V .NET MAUI Children je kolekce určená pro interní použití rozhraním .NET MAUI a neměla by být manipulována přímo. Proto by se podřízené položky kódu měly přidat přímo do rozložení:

Grid grid = new Grid();
grid.Add(new Label { Text = "Hello world" });

Důležité

Všechny Add metody rozšíření rozložení, například GridExtensions.Add, jsou vyvolány v rozložení místo kolekce rozložení Children .

Při spuštění upgradované aplikace .NET MAUI si můžete všimnout, že chování rozložení se liší. Další informace naleznete v tématu Změny chování rozložení z Xamarin.Forms.

Změny vlastního rozložení

Proces vytvoření vlastního rozložení Xamarin.Forms zahrnuje vytvoření třídy, která je odvozena od Layout<View>a přepsání VisualElement.OnMeasure a Layout.LayoutChildren metody. Další informace naleznete v tématu Vytvoření vlastního rozložení v Xamarin.Formssouboru .

V .NET MAUI třídy rozložení jsou odvozeny z abstraktní Layout třídy. Tato třída deleguje rozložení a měření napříč platformami na třídu správce rozložení. Každá třída správce rozložení implementuje ILayoutManager rozhraní, které určuje, že Measure a ArrangeChildren implementace musí být poskytnuty:

  • Implementace Measure volá IView.Measure každé zobrazení v rozložení a vrátí celkovou velikost rozložení vzhledem k omezením.
  • Implementace ArrangeChildren určuje, kde má být každé zobrazení umístěno v mezích rozložení, a volá Arrange každé zobrazení s příslušnými hranicemi. Návratová hodnota je skutečná velikost rozložení.

Další informace naleznete v tématu Vlastní rozložení.

Změny zařízení

Xamarin.FormsXamarin.Forms.Device má třídu, která vám pomůže pracovat se zařízením a platformou, na které aplikace běží. Ekvivalentní třída v rozhraní .NET MAUI je Microsoft.Maui.Controls.Devicezastaralá a její funkce se nahrazuje více typy.

Následující tabulka ukazuje nahrazení funkcí třídy Xamarin.Forms.Device .NET MAUI:

Xamarin.Forms Rozhraní api Rozhraní .NET MAUI API Komentáře
Xamarin.Forms.Device.Android Microsoft.Maui.Devices.DevicePlatform.Android
Xamarin.Forms.Device.iOS Microsoft.Maui.Devices.DevicePlatform.iOS
Xamarin.Forms.Device.GTK Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Device.macOS Žádný ekvivalent .NET MAUI. Místo toho použijte Microsoft.Maui.Devices.DevicePlatform.MacCatalyst.
Xamarin.Forms.Device.Tizen Microsoft.Maui.Devices.DevicePlatform.Tizen
Xamarin.Forms.Device.UWP Microsoft.Maui.Devices.DevicePlatform.WinUI
Xamarin.Forms.Device.WPF Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Device.Flags Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Device.FlowDirection Microsoft.Maui.ApplicationModel.AppInfo.RequestedLayoutDirection
Xamarin.Forms.Device.Idiom Microsoft.Maui.Devices.DeviceInfo.Idiom
Xamarin.Forms.Device.IsInvokeRequired Microsoft.Maui.Dispatching.Dispatcher.IsDispatchRequired
Xamarin.Forms.Device.OS Microsoft.Maui.Devices.DeviceInfo.Platform
Xamarin.Forms.Device.RuntimePlatform Microsoft.Maui.Devices.DeviceInfo.Platform
Xamarin.Forms.Device.BeginInvokeOnMainThread Microsoft.Maui.ApplicationModel.MainThread.BeginInvokeOnMainThread
Xamarin.Forms.Device.GetMainThreadSynchronizationContextAsync Microsoft.Maui.ApplicationModel.MainThread.GetMainThreadSynchronizationContextAsync
Xamarin.Forms.Device.GetNamedColor Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Device.GetNamedSize Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Device.Invalidate Microsoft.Maui.Controls.VisualElement.InvalidateMeasure
Xamarin.Forms.Device.InvokeOnMainThreadAsync Microsoft.Maui.ApplicationModel.MainThread.InvokeOnMainThreadAsync
Xamarin.Forms.Device.OnPlatform Microsoft.Maui.Devices.DeviceInfo.Platform
Xamarin.Forms.Device.OpenUri Microsoft.Maui.ApplicationModel.Launcher.OpenAsync
Xamarin.Forms.Device.SetFlags Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Device.SetFlowDirection Microsoft.Maui.Controls.Window.FlowDirection
Xamarin.Forms.Device.StartTimer Microsoft.Maui.Dispatching.DispatcherExtensions.StartTimer nebo Microsoft.Maui.Dispatching.Dispatcher.DispatchDelayed

Změny mapy

Map Ovládací Xamarin.Formsprvek a přidružené typy jsou v Xamarin.Forms.Maps oboru názvů. V .NET MAUI se tato funkce přesunula do oborů Microsoft.Maui.Controls.Maps názvů a Microsoft.Maui.Maps oborů názvů. Některé vlastnosti byly přejmenovány a některé typy byly nahrazeny ekvivalentními typy z Xamarin.Essentials.

Následující tabulka ukazuje nahrazení funkcí v Xamarin.Forms.Maps oboru názvů .NET MAUI:

Xamarin.Forms Rozhraní api Rozhraní .NET MAUI API Komentář
Xamarin.Forms.Maps.Map.HasScrollEnabled Microsoft.Maui.Controls.Maps.Map.IsScrollEnabled
Xamarin.Forms.Maps.Map.HasZoomEnabled Microsoft.Maui.Controls.Maps.Map.IsZoomEnabled
Xamarin.Forms.Maps.Map.TrafficEnabled Microsoft.Maui.Controls.Maps.Map.IsTrafficEnabled
Xamarin.Forms.Maps.Map.MoveToLastRegionOnLayoutChange Žádný ekvivalent .NET MAUI.
Xamarin.Forms.Maps.Pin.Id Microsoft.Maui.Controls.Maps.Pin.MarkerId
Xamarin.Forms.Maps.Pin.Position Microsoft.Maui.Controls.Maps.Pin.Location
Xamarin.Forms.Maps.MapClickedEventArgs.Position Microsoft.Maui.Controls.Maps.MapClickedEventArgs.Location
Xamarin.Forms.Maps.Position Microsoft.Maui.Devices.Sensors.Location Členové typu Xamarin.Forms.Maps.Position se změnili na Microsoft.Maui.Devices.Sensors.Location typ.
Xamarin.Forms.Maps.Geocoder Microsoft.Maui.Devices.Sensors.Geocoding Členové typu Xamarin.Forms.Maps.Geocoder se změnili na Microsoft.Maui.Devices.Sensors.Geocoding typ.

.NET MAUI má dva Map typy – Microsoft.Maui.Controls.Maps.Map a Microsoft.Maui.ApplicationModel.Map. Microsoft.Maui.ApplicationModel Protože obor názvů je jedním z direktiv .NET MAUIglobal using, při použití Microsoft.Maui.Controls.Maps.Map ovládacího prvku z kódu budete muset plně kvalifikovat využití Map nebo použít alias using.

V jazyce XAML xmlns by se měla přidat definice oboru názvů pro Map ovládací prvek. I když to není nutné, zabrání kolizi mezi typy Polygon a Polyline typy, které existují v obou oborech Microsoft.Maui.Controls.Maps názvů i Microsoft.Maui.Controls.Shapes v oboru názvů. Další informace naleznete v tématu Zobrazení mapy.

Další změny

Při přechodu Xamarin.Forms na .NET MAUI bylo sloučeno malé množství dalších rozhraní API. Následující tabulka ukazuje tyto změny:

Xamarin.Forms Rozhraní api Rozhraní .NET MAUI API Komentáře
Xamarin.Forms.Application.Properties Microsoft.Maui.Storage.Preferences
Xamarin.Forms.Button.Image Microsoft.Maui.Controls.Button.ImageSource
Xamarin.Forms.Frame.OutlineColor Microsoft.Maui.Controls.Frame.BorderColor
Xamarin.Forms.IQueryAttributable.ApplyQueryAttributes Microsoft.Maui.Controls.IQueryAttributable.ApplyQueryAttributes V Xamarin.Forms, ApplyQueryAttributes metoda přijímá IDictionary<string, string> argument. V .NET MAUI metoda ApplyQueryAttributes přijímá IDictionary<string, object> argument.
Xamarin.Forms.MenuItem.Icon Microsoft.Maui.Controls.MenuItem.IconImageSource Xamarin.Forms.MenuItem.Icon je základní třída pro Xamarin.Forms.ToolbarItem, a tak ToolbarItem.Icon se stává ToolbarItem.IconImageSource.
Xamarin.Forms.OrientationStateTrigger.Orientation Microsoft.Maui.Controls.OrientationStateTrigger.Orientation In Xamarin.Forms, OrientationStateTrigger.Orientation vlastnost je typu Xamarin.Forms.Internals.DeviceOrientation. V rozhraní .NET MAUI OrientationStateTrigger.Orientation je vlastnost typu DisplayOrientation.
Xamarin.Forms.OSAppTheme Microsoft.Maui.ApplicationModel.AppTheme
Xamarin.Forms.Span.ForegroundColor Microsoft.Maui.Controls.Span.TextColor
Xamarin.Forms.ToolbarItem.Name Microsoft.Maui.Controls.MenuItem.Text Microsoft.Maui.Controls.MenuItem.Text je základní třída pro Microsoft.Maui.Controls.ToolbarItem, a tak ToolbarItem.Name se stává ToolbarItem.Text.

Kromě toho Xamarin.Formsse Page.OnAppearing přepsání volá v Androidu, když je aplikace na pozadí a pak přenesena do popředí. Toto přepsání se ale ve stejném scénáři nevolá v iOSu a Windows. V rozhraní .NET MAUI OnAppearing() se přepsání při pozadí aplikace nevolá na žádné platformě a pak se přenese do popředí. Místo toho byste měli naslouchat událostem Window životního cyklu, abyste byli upozorněni, když se aplikace vrátí do popředí. Další informace najdete v oknech .NET MAUI.

Změny nativních formulářů

Nativní formuláře se Xamarin.Forms staly nativním vkládáním do rozhraní .NET MAUI a používá jiný inicializační přístup a různé rozšiřující metody k převodu ovládacích prvků pro různé platformy na jejich nativní typy. Další informace naleznete v tématu Nativní vkládání.

Spuštění migrované aplikace

Při ruční aktualizaci Xamarin.Forms aplikace na .NET MAUI budete muset povolit podporu .NET MAUI v každém projektu platformy, aktualizovat třídu vstupního bodu každého projektu platformy a pak nakonfigurovat spuštění aplikace .NET MAUI.

Povolení .NET MAUI v projektech platformy

Než aktualizujete třídu vstupního bodu každého projektu platformy, musíte nejprve povolit podporu .NET MAUI. Toho lze dosáhnout nastavením $(UseMaui) vlastnosti sestavení na true každý projekt platformy:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <UseMaui>true</UseMaui>
  </PropertyGroup>
</Project>

Důležité

Pokud chcete povolit podporu .NET MAUI, musíte ho přidat <UseMaui>true</UseMaui> do souboru projektu. Kromě toho se ujistěte, že jste přidali <EnableDefaultMauiItems>false</EnableDefaultMauiItems> do souboru projektu WinUI. Tím přestanete dostávat chyby sestavení týkající se InitializeComponent již definované metody.

Přidání odkazů na balíčky

V .NET 8 se .NET MAUI dodává jako úloha .NET a několik balíčků NuGet. Výhodou tohoto přístupu je, že umožňuje snadno připnout projekty na konkrétní verze a zároveň vám umožní snadno zobrazit náhled nerelevidovaných nebo experimentálních buildů.

Do každého souboru projektu byste měli přidat následující explicitní odkazy na <ItemGroup> balíčky:

<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />

Na $(MauiVersion) proměnnou odkazuje verze rozhraní .NET MAUI, kterou jste nainstalovali. Můžete to přepsat přidáním $(MauiVersion) vlastnosti sestavení do každého souboru projektu:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <UseMaui>True</UseMaui>
        <MauiVersion>8.0.3</MauiVersion>
    </PropertyGroup>
</Project>

Konfigurace projektu Androidu

V projektu .NET MAUI pro MainApplication Android aktualizujte třídu tak, aby odpovídala následujícímu kódu:

using System;
using Android.App;
using Android.Runtime;
using Microsoft.Maui;
using Microsoft.Maui.Hosting;
using YOUR_MAUI_CLASS_LIB_HERE;

namespace YOUR_NAMESPACE_HERE.Droid
{
    [Application]
    public class MainApplication : MauiApplication
    {
        public MainApplication(IntPtr handle, JniHandleOwnership ownership) : base(handle, ownership)
        {
        }

        protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
    }
}

Aktualizujte také třídu tak, MainActivity aby dědila z MauiAppCompatActivity:

using System;
using Microsoft.Maui;
using Android.App;
using Android.Content.PM;
using Android.Runtime;
using Android.OS;

namespace YOUR_NAMESPACE_HERE.Droid
{
    [Activity(Label = "MyTitle", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize)]
    public class MainActivity : MauiAppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
        }
    }
}

Potom aktualizujte soubor manifestu tak, aby určil, že minSdKVersion je 21, což je minimální verze sady Android SDK vyžadovaná rozhraním .NET MAUI. Toho lze dosáhnout úpravou <uses-sdk /> uzlu, což je podřízená položka <manifest> uzlu:

<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="32" />

Konfigurace projektu pro iOS

V projektu .NET MAUI iOS aktualizujte AppDelegate třídu tak, aby dědila z MauiUIApplicationDelegate:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Maui;
using Foundation;
using UIKit;
using YOUR_MAUI_CLASS_LIB_HERE;

namespace YOUR_NAMESPACE_HERE.iOS
{
    [Register("AppDelegate")]
    public partial class AppDelegate : MauiUIApplicationDelegate
    {
        protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
    }
}

Pak aktualizujte Info.plist tak, aby MinimumOSVersion byl 11.0, což je minimální verze iOS vyžadovaná rozhraním .NET MAUI.

Konfigurace projektu UPW

V projektu .NET MAUI WinUI 3 aktualizujte App.xaml tak, aby odpovídal následujícímu kódu:

<?xml version="1.0" encoding="utf-8"?>
<maui:MauiWinUIApplication
    x:Class="YOUR_NAMESPACE_HERE.WinUI.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:maui="using:Microsoft.Maui"
    xmlns:local="using:YOUR_NAMESPACE_HERE.WinUI">
    <maui:MauiWinUIApplication.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
                <!-- Other merged dictionaries here -->
            </ResourceDictionary.MergedDictionaries>
            <!-- Other app resources here -->
        </ResourceDictionary>
    </maui:MauiWinUIApplication.Resources>
</maui:MauiWinUIApplication>

Poznámka:

Pokud váš projekt obsahoval prostředky ve stávajícím souboru App.xaml , měli byste je migrovat do nové verze souboru.

Aktualizujte také App.xaml.cs tak, aby odpovídaly následujícímu kódu:

using Microsoft.Maui;
using Microsoft.Maui.Hosting;
using YOUR_MAUI_CLASS_LIB_HERE;

namespace YOUR_NAMESPACE_HERE.WinUI;

public partial class App : MauiWinUIApplication
{
    public App()
    {
        InitializeComponent();
    }

    protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}

Poznámka:

Pokud váš projekt zahrnul obchodní logiku do App.xaml.cs měli byste tuto logiku migrovat do nové verze souboru.

Potom do složky Vlastnosti projektu přidejte soubor launchSettings.json a do souboru přidejte následující JSON:

{
  "profiles": {
    "Windows Machine": {
      "commandName": "MsixPackage",
      "nativeDebugging": true
    }
  }
}

Vstupní bod aplikace

Aplikace .NET MAUI mají jeden vstupní bod multiplatformní aplikace. Každý vstupní bod platformy volá metodu CreateMauiApp MauiProgram statické třídy a vrátí hodnotu MauiApp.

Proto přidejte novou třídu s názvem MauiProgram , která obsahuje následující kód:

namespace YOUR_NAMESPACE_HERE;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>();

        return builder.Build();
    }
}

Poznámka:

V Xamarin.Forms případě projektů App UPW najdete odkaz v builder.UseMauiApp<App>() souboru MainPage.xaml.cs .

Pokud existují služby specifické pro platformu, které je potřeba migrovat do rozhraní .NET MAUI, použijte AddTransient(IServiceCollection, Type) metodu k přidání přechodné služby zadaného typu do zadaného IServiceCollectiontypu .

Poznámka:

Obory Xamarin.Forms názvů můžete rychle aktualizovat pomocí rychlých Microsoft.Maui akcí v sadě Visual Studio za předpokladu, že máte nainstalovaný Pomocník s upgradem.

Změny AssemblyInfo

Vlastnosti, které jsou obvykle nastavené v souboru AssemblyInfo.cs , jsou nyní k dispozici v projektu ve stylu sady SDK. Doporučujeme je migrovat z AssemblyInfo.cs do souboru projektu v každém projektu a odebrat AssemblyInfo.cs soubor.

Volitelně můžete zachovat soubor AssemblyInfo.cs a nastavit GenerateAssemblyInfo vlastnost v souboru projektu na false:

<PropertyGroup>
  <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>

Další informace o GenerateAssemblyInfo vlastnosti naleznete v tématu GenerateAssemblyInfo.

Aktualizace závislostí aplikací

Obecně platí, že Xamarin.Forms balíčky NuGet nejsou kompatibilní s .NET 8, pokud nebyly rekompilovány pomocí monikerů rozhraní .NET Target Framework (TFM). Aplikace pro Android ale můžou používat balíčky NuGet, které cílí na monoandroid architektury a monoandroidXX.X architektury.

Pokud chcete ověřit, jestli je balíček kompatibilní s .NET 8, podívejte se na kartu Frameworks na NuGetu pro balíček, který používáte, a zkontrolujte, jestli obsahuje jednu z kompatibilních architektur zobrazených v následující tabulce:

Kompatibilní architektury Nekompatibilní architektury
net8.0-android, monoandroid, monoandroidXX.X
net8.0-ios monotouch, xamarinios, xamarinios10
net8.0-macos monomac, xamarinmac, xamarinmac20
net8.0-tvos xamarintvos
xamarinwatchos

Poznámka:

Knihovny .NET Standard, které nemají žádné závislosti na nekompatibilních architekturách uvedených výše, jsou stále kompatibilní s .NET 8.

Pokud balíček na NuGetu indikuje kompatibilitu s některou z výše uvedených kompatibilních architektur, bez ohledu na to, že zahrnuje také nekompatibilní architektury, je balíček kompatibilní. Kompatibilní balíčky NuGet je možné přidat do projektu knihovny .NET MAUI pomocí správce balíčků NuGet v sadě Visual Studio.

Pokud nemůžete najít kompatibilní verzi balíčku NuGet pro .NET 8, měli byste:

  • Pokud vlastníte kód, překompilujte balíček pomocí .NET TFM.
  • Vyhledejte verzi Preview balíčku .NET 8.
  • Nahraďte závislost alternativou kompatibilní s .NET 8.

Kompilace a řešení potíží

Po vyřešení závislostí byste měli vytvořit projekt. Všechny chyby vás provedou k dalším krokům.

Tip

  • Před otevřením a sestavováním projektů v sadě Visual Studio odstraňte všechny složky bin a obj , zejména při změně verzí .NET.
  • Odstraňte Resource.designer.cs vygenerovaný soubor z projektu Android.

Následující tabulka obsahuje pokyny k překonání běžných problémů se sestavením nebo modulem runtime:

Problém Tip
Xamarin.* obor názvů neexistuje. Aktualizujte obor názvů na ekvivalent .NET MAUI. Další informace najdete v tématu Namespace změny.
Rozhraní API neexistuje. Aktualizujte využití rozhraní API na ekvivalent .NET MAUI. Další informace najdete v tématu Změny rozhraní API.
Aplikace se nenasadí. Ujistěte se, že je požadovaný projekt platformy nastavený na nasazení v nástroji Visual Studio Configuration Manager.
Aplikace se nespustí. Aktualizujte třídu vstupního bodu každého projektu platformy a vstupní bod aplikace. Další informace najdete v tématu Bootstrap migrované aplikace.
CollectionView se neposoudí. Zkontrolujte rozložení kontejneru a naměřenou velikost CollectionView. Ve výchozím nastavení bude ovládací prvek zabírat tolik místa, kolik kontejner umožňuje. Omezení Grid omezuje podřízené položky ve své vlastní velikosti. Umožňuje StackLayout však, aby děti zabírají místo nad hranicemi.
Automaticky otevírané okno se zobrazí pod stránkou v iOSu. Všechny Xamarin.Formsautomaticky otevíraná okna v iOSu jsou UIWindow instance, ale v automaticky otevíraných oken .NET MAUI se zobrazují vyhledáním aktuální prezentace ViewController a zobrazením automaticky otevíraných oken PresentViewControllerAsync. V pluginech, jako je Mopups, aby se zajistilo, že se automaticky otevírané okno správně zobrazí , DisplayAlertDisplayActionSheetnebo DisplayPromptAsync z ContentPage použité uvnitř Mopup automaticky otevíraného okna.
BoxView nezobrazuje se. Výchozí velikost BoxView in Xamarin.Forms je 40x40. Výchozí velikost BoxView rozhraní .NET MAUI je 0x0. Nastavte WidthRequest a HeightRequest nastavte hodnotu 40.
V rozložení chybí odsazení, okraj nebo mezery. Přidejte do projektu výchozí hodnoty na základě prostředku stylu .NET MAUI. Další informace naleznete v tématu Výchozí změny hodnoty z Xamarin.Forms.
Vlastní rozložení nefunguje. Vlastní kód rozložení potřebuje aktualizovat, aby fungoval v .NET MAUI. Další informace najdete v tématu Změny vlastního rozložení.
Vlastní renderer nefunguje. Kód rendereru potřebuje aktualizaci, aby fungoval v rozhraní .NET MAUI. Další informace najdete v tématu Použití vlastních rendererů v rozhraní .NET MAUI.
Efekt nefunguje. Kód efektu musí aktualizovat, aby fungoval v rozhraní .NET MAUI. Další informace najdete v tématu Použití efektů v rozhraní .NET MAUI.
SkiaSharp kód nefunguje. SkiaSharp Aby kód fungoval v .NET MAUI, potřebuje menší aktualizace. Další informace najdete v tématu Opětovné použití SkiaSharp kódu v .NET MAUI.
Nelze získat přístup k datům dříve vytvořených vlastností aplikace. Migrujte data vlastností aplikace do předvoleb .NET MAUI. Další informace najdete v tématu Migrace dat ze slovníku Xamarin.Forms vlastností aplikace do předvoleb .NET MAUI.
Nelze získat přístup k dříve vytvořeným zabezpečeným datům úložiště. Migrujte zabezpečená data úložiště do .NET MAUI. Další informace najdete v tématu Migrace ze Xamarin.Essentials zabezpečeného úložiště do zabezpečeného úložiště .NET MAUI.
Nelze získat přístup k dříve vytvořeným datům sledování verzí. Migrujte data sledování verzí do .NET MAUI. Další informace najdete v tématu Migrace dat sledování verzí z Xamarin.Forms aplikace do aplikace .NET MAUI.

Viz také