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

Pokud chcete migrovat Xamarin.Forms aplikaci do jediného projektu . NET Multiplatformní uživatelské rozhraní aplikace (.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.
  • Vytvoření aplikace .NET MAUI
  • Zkopírujte kód a konfiguraci z Xamarin.Forms aplikace do aplikace .NET MAUI.
  • Zkopírujte prostředky z aplikace Xamarin.Forms do aplikace .NET MAUI.
  • Aktualizujte obory názvů.
  • Vyřešte všechny změny rozhraní API.
  • Upgradujte nebo nahraďte nekompatibilní závislosti verzemi .NET 8.
  • Zkompilujte a otestujte aplikaci.

Pro zjednodušení procesu upgradu byste měli vytvořit novou aplikaci .NET MAUI se stejným názvem jako vaše Xamarin.Forms aplikace 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í aplikace .NET MAUI

V sadě Visual Studio vytvořte novou aplikaci .NET MAUI se stejným názvem jako vaše Xamarin.Forms aplikace:

Snímek obrazovky s vytvořením aplikace .NET MAUI v sadě Visual Studio

Otevřením souboru projektu potvrdíte, že máte projekt ve stylu sady .NET SDK.

Kopírování kódu do aplikace .NET MAUI

Veškerý kód pro různé platformy z Xamarin.Forms projektu knihovny by se měl zkopírovat do projektu aplikace .NET MAUI v identicky pojmenovaných složkách a souborech.

Vlastní renderery je možné použít buď v aplikaci .NET MAUI, nebo migrovat do obslužné rutiny .NET MAUI. Další informace najdete v tématu Opětovné použití vlastních rendererů v rozhraní .NET MAUI a migrace vlastního Xamarin.Forms rendereru do obslužné rutiny .NET MAUI.

Efekty je možné znovu použít v aplikaci .NET MAUI. Další informace naleznete v tématu Opakované použití efektů.

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.

Kód specifický pro platformu

Projekt aplikace .NET MAUI obsahuje složku Platformy s každou podřízenou složkou představující platformu, na kterou může .NET MAUI cílit:

Snímek obrazovky s složkami platformy

Složky pro každou platformu obsahují prostředky specifické pro platformu a kód, který spustí aplikaci na každé platformě:

Snímek obrazovky kódu specifického pro platformu

Do těchto složek by se měl zkopírovat kód a jejich složky obsahující Xamarin.Forms vaše hlavní projekty:

  • Kód z hlavního Xamarin.Forms projektu Androidu by se měl zkopírovat do složky Platform\Android projektu aplikace .NET MAUI. Kromě toho zkopírujte libovolný vlastní kód z vašich Xamarin.FormsMainActivity a MainApplication tříd do stejných tříd v projektu aplikace .NET MAUI.

  • Kód z hlavního Xamarin.Forms projektu iOS by se měl zkopírovat do složky Platforms\iOS projektu aplikace .NET MAUI. Kromě toho zkopírujte libovolný vlastní kód z vaší Xamarin.FormsAppDelegate třídy do stejné třídy v projektu aplikace .NET MAUI.

    Poznámka:

    Seznam zásadních změn v .NET pro iOS najdete v tématu Zásadní změny v .NET pro iOS.

  • Kód z hlavního Xamarin.Forms projektu UPW by se měl zkopírovat do složky Platforms\Windows projektu aplikace .NET MAUI. Kromě toho zkopírujte libovolný vlastní kód z vaší Xamarin.FormsApp třídy do stejné třídy v projektu aplikace .NET MAUI.

V době sestavení systém sestavení obsahuje kód pouze z každé složky při sestavování pro danou konkrétní platformu. Když například sestavíte soubory pro Android ve složce Platformy\Android , budou součástí balíčku aplikace, ale soubory v ostatních složkách Platformy nebudou. Tento přístup používá více cílení na více platforem z jednoho projektu. Aplikace .NET MAUI můžou být také více cílené na základě vašich vlastních kritérií názvu souboru a složky. Díky tomu můžete projekt aplikace .NET MAUI strukturovat tak, abyste nemuseli kód platformy umístit do podřízených složek složky Platformy . Další informace najdete v tématu Konfigurace cílení na více verzí.

Kopírování konfigurace do aplikace .NET MAUI

Každá platforma používá vlastní soubor manifestu nativní aplikace k určení informací, jako je název aplikace, ID, verze a další. Jeden projekt .NET MAUI umožňuje zadat tato běžná data aplikace v jednom umístění v souboru projektu.

Pokud chcete zadat data manifestu sdílené aplikace pro projekt, otevřete místní nabídku projektu v Průzkumník řešení a pak zvolte Vlastnosti. Název aplikace, ID a verze je pak možné zadat v MAUI Shared > General:

Snímek obrazovky manifestu aplikace .NET MAUI

V době sestavení se data manifestu sdílené aplikace sloučí s daty specifických pro platformu v souboru manifestu nativní aplikace, aby se vytvořil soubor manifestu balíčku aplikace. Další informace najdete v tématu Konfigurace projektu v .NET MAUI – MAUI Sdílené.

Zbývající data z manifestů aplikace Xamarin.Forms by se měla zkopírovat do manifestu aplikace .NET MAUI:

  • V Androidu zkopírujte všechna další data ze souboru AndroidManifest.xml v Xamarin.Forms hlavním projektu Androidu do souboru Platforms\Android\AndroidManifest.xml v projektu aplikace .NET MAUI.
  • V iOSu zkopírujte veškerá další data ze souboru Info.plist v hlavním projektu iOS Xamarin.Forms do souboru Platforms\iOS\Info.plist v projektu aplikace .NET MAUI. Kromě toho zkopírujte Xamarin.Forms soubor Entitlements.plist v hlavním projektu iOS do složky Platforms\iOS v projektu aplikace .NET MAUI.
  • Ve Windows zkopírujte další data ze souboru Package.appxmanifest v Xamarin.Forms hlavním projektu UPW do souboru Platforms\Windows\Package.appxmanifest v projektu aplikace .NET MAUI.

Kopírování prostředků do aplikace .NET MAUI

Jeden projekt .NET MAUI umožňuje ukládání souborů prostředků do jednoho umístění při využívání na jednotlivých platformách. To zahrnuje písma, obrázky, ikonu aplikace, úvodní obrazovku, nezpracované prostředky a soubory CSS pro stylování aplikací .NET MAUI.

Soubory prostředků by se obvykle měly umístit do složky Zdroje projektu aplikace .NET MAUI nebo do podřízených složek složky Prostředky a musí mít správně nastavenou akci sestavení. Následující tabulka uvádí akce sestavení pro jednotlivé typy souborů prostředků:

Prostředek Akce sestavení
Ikona aplikace MauiIcon
Písma MauiFont
Obrázky MauiImage
Úvodní obrazovka MauiSplashScreen
Nezpracované prostředky MauiAsset
Soubory CSS MauiCss

Poznámka:

Soubory XAML se také ukládají do projektu aplikace .NET MAUI a automaticky se přiřazují akci sestavení MauiXaml . Do složky Zdroje projektu aplikace se ale obvykle umístí jenom slovníky prostředků XAML.

Následující snímek obrazovky ukazuje typickou složku Resources obsahující podřízené složky pro každý typ prostředku:

Snímek obrazovky s prostředky obrázku a písma

Akce sestavení pro soubor prostředků bude správně nastavena, pokud byl prostředek přidán do správné podřízené složky Resources .

Důležité

Prostředky specifické pro platformu přepíší své sdílené protějšky prostředků. Pokud máte například image specifickou pro Android, která se nachází na platformách\Android\Resources\drawable-xhdpi\logo.png a poskytnete také sdílený obrázek Resources\Images\logo.svg , použije se soubor SVG (Scalable Vector Graphics) k vygenerování požadovaných imagí Androidu s výjimkou image XHDPI, která již existuje jako obrázek specifický pro platformu.

Ikony aplikací

Ikona Xamarin.Forms aplikace by se měla přidat do projektu aplikace .NET MAUI přetažením obrázku do složky Resources\AppIcon projektu, kde se její akce sestavení automaticky nastaví na MauiIcon. V době sestavení se ikona aplikace změní na správné velikosti cílové platformy a zařízení. Ikony aplikací se mění na několik rozlišení, protože mají více použití, včetně toho, že se používají k reprezentaci aplikace na zařízení a v App Storu.

Další informace najdete v tématu Přidání ikony aplikace do projektu aplikace .NET MAUI.

Úvodní obrazovka

Pokud má vaše Xamarin.Forms aplikace úvodní obrazovku, měla by se přidat do projektu aplikace .NET MAUI přetažením obrázku do složky Resources\Splash projektu, kde se její akce sestavení automaticky nastaví na MauiSplashScreen. V době sestavení se obrázek úvodní obrazovky změní na správnou velikost cílové platformy a zařízení.

Další informace najdete v tématu Přidání úvodní obrazovky do projektu aplikace .NET MAUI.

Obrázky

Zařízení mají řadu velikostí obrazovky a hustoty a každá platforma má funkce pro zobrazování obrázků závislých na hustotě. V Xamarin.Formspřípadě obrázků závislých na hustotě jsou obvykle umístěny v hlavních projektech a přijímají zásady vytváření názvů specifické pro platformu. Existují dva přístupy, které je možné provést při migraci těchto imagí do .NET MAUI.

Doporučeným přístupem je zkopírovat verzi každého obrázku s nejvyšším rozlišením z vašeho Xamarin.Forms řešení do projektu aplikace .NET MAUI tak, že ji přetáhnete do složky Resources\Images projektu, kde se její akce sestavení automaticky nastaví na MauiImage. Bude také nutné nastavit BaseSize atribut každého rastrového obrázku, aby se zajistilo, že dojde ke změně velikosti. To eliminuje nutnost mít na každé platformě více verzí jednotlivých imagí. V době sestavení se pak všechny image změní na několik imagí závislých na hustotě, které splňují požadavky platformy. Další informace najdete v tématu Přidání obrázků do projektu aplikace .NET MAUI.

Alternativně můžete z Xamarin.Forms vašeho řešení zkopírovat obrázky závislé na hustotě do shodně pojmenovaných složek ve složce Platformy\{Platforma} projektu aplikace .NET MAUI a nastavit jejich akce sestavení na akce sestavení, které se používají ve vašem Xamarin.Forms řešení. Následující tabulka uvádí ukázková umístění obrázků pro Xamarin.Forms řešení a jejich ekvivalentní umístění v projektu aplikace .NET MAUI:

Xamarin.Forms umístění obrázku Umístění obrázku .NET MAUI Akce sestavení image platformy .NET MAUI
{MyApp.Android}\Resources\drawable-xhdpi\image.png Platformy\Android\Resources\drawable-xhdpi\image.png AndroidResource
{MyApp.iOS}\image.jpg *Platforms\iOS\Resources\image.jpg BundleResource
{MyApp.UWP}\Assets\Images\image.gif *Platforms\Windows\Assets\Images\image.gif Obsah

Za předpokladu, že jste přijali stejnou konvenci vytváření názvů imagí, jakou jste použili ve svém Xamarin.Forms řešení, zvolí se příslušná image za běhu na základě možností zařízení. Nevýhodou tohoto přístupu je, že na každé platformě máte stále více verzí jednotlivých imagí.

Písma

Všechna písma z vašeho Xamarin.Forms řešení je možné přidat do řešení .NET MAUI tak, že je přetáhnete do složky Resources\Fonts projektu aplikace .NET MAUI, kde se jejich akce sestavení automaticky nastaví na MauiFont.

Další informace najdete v tématu Písma.

Soubory CSS

Všechny soubory CSS z vašeho Xamarin.Forms řešení je možné přidat do řešení .NET MAUI tak, že je přetáhnete do identické složky a nastavíte akci sestavení na MauiCss v okně Vlastnosti .

Další informace o používání souborů CSS v aplikaci .NET MAUI najdete v tématu Styl aplikace využívající šablony stylů CASCADING.

Nezpracované prostředky

Všechny nezpracované soubory assetů, jako je HTML, JSON a video, by se měly zkopírovat z vašeho Xamarin.Forms řešení do projektu aplikace .NET MAUI tak, že je přetáhnete do složky Resources\Raw projektu, kde se jejich akce sestavení automaticky nastaví na MauiAsset.

Lokalizované prostředky

V aplikaci .NET MAUI se řetězce lokalizují pomocí stejného přístupu jako v Xamarin.Forms aplikaci. Proto by se vaše soubory prostředků .NET (.resx) měly zkopírovat z vašeho Xamarin.Forms řešení do identické pojmenované složky v řešení .NET MAUI. Pak musí být zadán neutrální jazyk vaší aplikace .NET MAUI. Další informace najdete v tématu Určení neutrálního jazyka aplikace.

Poznámka:

Soubory prostředků .NET nemusí být umístěné ve složce Zdroje projektu aplikace .NET MAUI.

V aplikaci .NET MAUI se obrázky lokalizují pomocí stejného přístupu jako v Xamarin.Forms aplikaci. Proto by se lokalizované obrázky a složky, ve kterých se nacházejí, měly zkopírovat z vašeho Xamarin.Forms řešení do projektu aplikace .NET MAUI:

  • Kořenová složka v projektu aplikace .NET MAUI pro lokalizované obrázky v Androidu je Platform\Android\Resources.
  • V iOSu je kořenová složka v projektu aplikace .NET MAUI pro lokalizované obrázky Platform\iOS\Resources.
  • Kořenová složka v projektu aplikace .NET MAUI pro lokalizované obrázky ve Windows je Platforms\Windows\Assets\Images.

Lokalizované image by měly mít akce sestavení nastavené na akce sestavení, které se ve vašem Xamarin.Forms řešení používají. Další informace naleznete v tématu Lokalizace obrázků.

V aplikaci .NET MAUI se názvy aplikací lokalizují pomocí stejného přístupu jako v Xamarin.Forms aplikaci:

  • V Systému Android lze lokalizovaný název aplikace uložit pomocí konvence pojmenování na základě složky ve složce Platforms\Android\Resources . Složky a soubory lokalizace názvu aplikace by se měly zkopírovat do této složky z vašeho Xamarin.Forms řešení.
  • V iOSu se lokalizovaný název aplikace ukládá pomocí konvence pojmenování na základě složky ve složce Platforms\iOS\Resources . Složky a soubory lokalizace názvu aplikace by se měly zkopírovat do této složky z vašeho Xamarin.Forms řešení.
  • Ve Windows je lokalizovaný název aplikace uložený v manifestu balíčku aplikace.

Další informace najdete v tématu Lokalizace názvu aplikace. Další informace o lokalizaci aplikací .NET MAUI najdete v tématu Lokalizace.

Změny oboru názvů

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.

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.Colorfloat, 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.

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í.

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 naleznete v tématu Změny oboru názvů.
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.