Delen via


Een app handmatig upgraden Xamarin.Forms naar een .NET MAUI-app met meerdere projecten met de projectsjabloon

Het upgraden van een multi-project Xamarin.Forms app naar een multi-project .NET Multi-platform App UI (.NET MAUI) app kan worden uitgevoerd door een nieuwe multi-project .NET MAUI app te maken en vervolgens de code en resources van uw Xamarin.Forms apps te migreren naar de multi-project .NET MAUI app. Vervolgens zijn er aanvullende stappen om te profiteren van wijzigingen in .NET MAUI.

Als u een app met meerdere projecten Xamarin.Forms handmatig wilt migreren naar een .NET MAUI-bibliotheek-app voor meerdere projecten, moet u het volgende doen:

  • Werk je Xamarin.Forms app bij om Xamarin.Forms 5 te gebruiken.
  • Werk de afhankelijkheden van de app bij naar de nieuwste versies.
  • Zorg ervoor dat de app nog steeds werkt.
  • Werk namespaces bij.
  • Behandel eventuele API-wijzigingen.
  • Upgrade of vervang incompatibele afhankelijkheden door .NET 8-versies.
  • Compileer en test je app.

Om het upgradeproces te vereenvoudigen, moet u een nieuwe multi-project .NET MAUI-app met dezelfde naam als uw Xamarin.Forms app maken en vervolgens uw code, configuratie en resources erin kopiëren. Dit is de aanpak die hieronder wordt uiteengezet.

Werk je Xamarin.Forms app bij

Voordat u uw Xamarin.Forms-app upgrade naar .NET MAUI, moet u eerst uw Xamarin.Forms-app updaten zodat deze Xamarin.Forms 5 gebruikt en ervoor zorgen dat deze nog steeds correct werkt. Daarnaast moet u de afhankelijkheden die uw app gebruikt bijwerken naar de nieuwste versies.

Dit zal helpen om de rest van het migratieproces te vereenvoudigen, omdat het de API-verschillen tussen Xamarin.Forms en .NET MAUI zal minimaliseren en ervoor zal zorgen dat je de .NET-compatibele versies van je afhankelijkheden gebruikt, indien deze bestaan.

Een nieuw project maken

Maak in Visual Studio een nieuwe .NET MAUI-app voor meerdere projecten met dezelfde naam als uw Xamarin.Forms project. De sjabloon voor meerdere projecten biedt een .NET MAUI-app voor Android, iOS, Mac Catalyst en WinUI met meerdere, afzonderlijke app-projecten.

Opmerking

U kunt de app-projecten verwijderen voor platforms die u niet ondersteunt.

Als u het projectbestand voor de klassebibliotheek opent, controleert u of u een .NET SDK-project hebt:

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

    <PropertyGroup>
        <TargetFrameworks>net8.0;net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFramework>
        <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
        <SingleProject>true</SingleProject>
        <ImplicitUsings>enable</ImplicitUsings>
        <UseMaui>true</UseMaui>
        <Nullable>enable</Nullable>
    </PropertyGroup>

</Project>

Als u een specifiek platformproject opent, moet u ook bevestigen dat u vergelijkbare eigenschappen hebt ingesteld, inclusief versiebeheer met een verwijzing naar het bibliotheekproject:

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

    <PropertyGroup>
        <TargetFramework>net8.0-android</TargetFramework>
        <SupportedOSPlatformVersion>21.0</SupportedOSPlatformVersion>
        <OutputType>Exe</OutputType>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
        <UseMaui>true</UseMaui>
    </PropertyGroup>

    <!--
        ...
    -->

    <ItemGroup>
        <ProjectReference Include="..\MauiApp.1\MauiApp.1.csproj" />
    </ItemGroup>

</Project>

Bestanden kopiëren naar de .NET MAUI-app

Alle platformoverschrijdende code van uw Xamarin.Forms bibliotheekproject moet worden gekopieerd naar uw .NET MAUI-bibliotheekproject in identieke benoemde mappen en bestanden.

Aangepaste renderers kunnen opnieuw worden gebruikt in een .NET MAUI-app of worden gemigreerd naar een .NET MAUI-handler. Zie Aangepaste renderers hergebruiken in .NET MAUI en Een aangepaste renderer migreren Xamarin.Forms naar een .NET MAUI-handler voor meer informatie.

Effecten kunnen opnieuw worden gebruikt in een .NET MAUI-app. Zie Hergebruikeffecten voor meer informatie.

Als er platformspecifieke services zijn die moeten worden overgezet naar .NET MAUI, gebruik dan de AddTransient(IServiceCollection, Type)-methode om een tijdelijke service van het opgegeven type toe te voegen aan de opgegeven IServiceCollection.

Alle platformcode, resources en configuratie moeten vervolgens worden gekopieerd naar uw .NET MAUI-app voor meerdere projecten.

Wijzigingen in naamruimten

De namespaces zijn gewijzigd bij de overgang van Xamarin.Forms naar .NET MAUI, en Xamarin.Essentials-functies maken nu deel uit van .NET MAUI. Voor het bijwerken van namespaces dient u een zoek-en-vervang uit te voeren voor de volgende namespaces:

Xamarin.Forms naamruimte .NET MAUI-naamruimten
Xamarin.Forms Microsoft.Maui en Microsoft.Maui.Controls
Xamarin.Forms.DualScreen Microsoft.Maui.Controls.Foldable
Xamarin.Forms.Maps Microsoft.Maui.Controls.Maps en 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

.NET MAUI-projecten maken gebruik van impliciete global using directieven. Deze functie stelt je in staat om using richtlijnen voor de Xamarin.Essentials naamruimte te verwijderen, zonder dat je ze hoeft te vervangen door de equivalente .NET MAUI naamruimtes.

Bovendien is de standaard XAML-naamruimte in .NET MAUI veranderd van http://xamarin.com/schemas/2014/forms in Xamarin.Forms naar http://schemas.microsoft.com/dotnet/2021/maui. Vervang daarom alle gevallen van xmlns="http://xamarin.com/schemas/2014/forms" door xmlns="http://schemas.microsoft.com/dotnet/2021/maui".

Opmerking

U kunt uw Xamarin.Forms naamruimten snel bijwerken naar Microsoft.Maui door Snelle acties in Visual Studio te gebruiken, op voorwaarde dat u Upgrade Assistant heeft geïnstalleerd.

API-wijzigingen

Sommige API's zijn gewijzigd in de overstap van Xamarin.Forms, naar .NET MAUI. Dit zijn meerdere redenen, waaronder het verwijderen van dubbele functionaliteit veroorzaakt doordat Xamarin.Essentials onderdeel werd van .NET MAUI, en ervoor zorgen dat de API's de .NET naamgevingsrichtlijnen volgen. De volgende secties bespreken deze veranderingen.

Kleurwijzigingen

In Xamarin.Forms, de Xamarin.Forms.Color struct kunt u Color objecten creëren met behulp van double waarden en biedt benoemde kleuren, zoals Xamarin.Forms.Color.AliceBlue. In .NET MAUI is deze functionaliteit opgesplitst in de Microsoft.Maui.Graphics.Color-klasse en de Microsoft.Maui.Graphics.Colors-klasse.

De Microsoft.Maui.Graphics.Color klasse, in de Microsoft.Maui.Graphics namespace, stelt je in staat Color objecten te construeren met behulp van float waarden, byte waarden, en int waarden. De Microsoft.Maui.Graphics.Colors klasse, die zich ook in de Microsoft.Maui.Graphics namespace bevindt, biedt grotendeels dezelfde benoemde kleuren. Bijvoorbeeld, gebruik Colors.AliceBlue om de AliceBlue kleur te specificeren.

De volgende tabel toont de API-wijzigingen tussen de Xamarin.Forms.Color struct en de Microsoft.Maui.Graphics.Color class.

Xamarin.Forms API .NET MAUI API Opmerking
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 eigenschap vervangen door een methode in .NET MAUI.
Xamarin.Forms.Color.Saturation Microsoft.Maui.Graphics.Color.GetSaturation Xamarin.Forms eigenschap vervangen door een methode in .NET MAUI.
Xamarin.Forms.Color.Luminosity Microsoft.Maui.Graphics.Color.GetLuminosity Xamarin.Forms eigenschap vervangen door een methode in .NET MAUI.
Xamarin.Forms.Color.Default Geen equivalent voor .NET MAUI. In plaats daarvan, vallen Microsoft.Maui.Graphics.Color-objecten standaard terug op null.
Xamarin.Forms.Color.Accent Geen equivalent voor .NET MAUI.
Xamarin.Forms.Color.FromHex Microsoft.Maui.Graphics.Color.FromArgb Microsoft.Maui.Graphics.Color.FromHex is verouderd en zal in een toekomstige versie worden verwijderd.

Bovendien zijn alle numerieke waarden in een Microsoft.Maui.Graphics.Colorfloat, in plaats van double zoals gebruikt in Xamarin.Forms.Color.

Opmerking

In tegenstelling tot Xamarin.Forms heeft een Microsoft.Maui.Graphics.Color geen impliciete conversie naar System.Drawing.Color.

Layoutwijzigingen

De volgende tabel bevat een overzicht van de layout-API's die zijn verwijderd bij de overgang van Xamarin.Forms naar .NET MAUI.

Xamarin.Forms API .NET MAUI API Opmerkingen
Xamarin.Forms.AbsoluteLayout.IAbsoluteList<T>.Add De Add overload die drie argumenten accepteert, is niet aanwezig in .NET MAUI.
Xamarin.Forms.Grid.IGridList<T>.AddHorizontal Geen equivalent voor .NET MAUI.
Xamarin.Forms.Grid.IGridList<T>.AddVertical Geen equivalent voor .NET MAUI.
Xamarin.Forms.RelativeLayout Microsoft.Maui.Controls.Compatibility.RelativeLayout Binnen .NET MAUI bestaat RelativeLayout alleen als een compatibiliteitscontrole voor gebruikers die migreren vanaf Xamarin.Forms. Gebruik in plaats daarvan Grid, of voeg xmlns toe voor de compatibiliteitsnamespace.

Bovendien wordt het toevoegen van kinderen aan een lay-out in code in Xamarin.Forms gerealiseerd door het toevoegen van de kinderen aan de Children verzameling van de lay-out.

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

In .NET INTERNAL is de Children verzameling bedoeld voor intern gebruik door .NET INTERNAL en mag deze niet rechtstreeks worden gemanipuleerd. Daarom moeten kinderen in de code direct aan de lay-out worden toegevoegd.

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

Belangrijk

Alle Add lay-outuitbreidingsmethoden, zoals GridExtensions.Add, worden op de lay-out aangeroepen in plaats van op de Children-verzameling van lay-outs.

U ziet mogelijk dat bij het uitvoeren van uw bijgewerkte .NET MAUI-app het lay-outgedrag anders is. Voor meer informatie, zie Layoutgedragswijzigingen van Xamarin.Forms.

Aangepaste lay-outwijzigingen

Het proces voor het maken van een aangepaste lay-out in Xamarin.Forms houdt in dat er een klasse wordt aangemaakt die afstamt van Layout<View>, en het overschrijven van de VisualElement.OnMeasure en Layout.LayoutChildren methoden. Voor meer informatie, zie Een aangepaste indeling maken in Xamarin.Forms.

In .NET MAUI zijn de opmaakklassen afgeleid van de abstracte Layout klasse. Deze klasse delegeert het platformonafhankelijke ontwerp en de meting aan een lay-out manager klasse. Elke layout manager klasse implementeert de ILayoutManager interface, die specificeert dat Measure en ArrangeChildren implementaties moeten worden geleverd.

  • De Measure-implementatie roept IView.Measure aan op elke weergave in de lay-out en retourneert de totale grootte van de lay-out gezien de beperkingen.
  • De ArrangeChildren implementatie bepaalt waar elke weergave binnen de grenzen van de lay-out moet worden geplaatst en roept Arrange aan voor elke weergave met de juiste grenzen. De retourwaarde is de werkelijke grootte van de lay-out.

Voor meer informatie, zie Aangepaste ontwerpen.

Apparaatwijzigingen

Xamarin.Forms heeft een Xamarin.Forms.Device klasse die je helpt om te communiceren met het apparaat en het platform waarop de app draait. De equivalente klasse in .NET MAUI, Microsoft.Maui.Controls.Device, is verouderd en de functionaliteit ervan is vervangen door meerdere typen.

De volgende tabel toont de .NET MAUI-vervangingen voor de functionaliteit in de Xamarin.Forms.Device-klasse:

Xamarin.Forms API .NET MAUI API Opmerkingen
Xamarin.Forms.Device.Android Microsoft.Maui.Devices.DevicePlatform.Android
Xamarin.Forms.Device.iOS Microsoft.Maui.Devices.DevicePlatform.iOS
Xamarin.Forms.Device.GTK Geen equivalent voor .NET MAUI.
Xamarin.Forms.Device.macOS Geen equivalent voor .NET MAUI. Gebruik in plaats daarvan 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 Geen equivalent voor .NET MAUI.
Xamarin.Forms.Device.Flags Geen equivalent voor .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 Geen equivalent voor .NET MAUI.
Xamarin.Forms.Device.GetNamedSize Geen equivalent voor .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 Geen equivalent voor .NET MAUI.
Xamarin.Forms.Device.SetFlowDirection Microsoft.Maui.Controls.Window.FlowDirection
Xamarin.Forms.Device.StartTimer Microsoft.Maui.Dispatching.DispatcherExtensions.StartTimer of Microsoft.Maui.Dispatching.Dispatcher.DispatchDelayed

Kaartwijzigingen

In Xamarin.Forms bevinden de Map-besturing en bijbehorende typen zich in de Xamarin.Forms.Maps-naamruimte. In .NET MAUI is deze functionaliteit verplaatst naar de Microsoft.Maui.Controls.Maps en Microsoft.Maui.Maps naamruimten. Sommige eigenschappen zijn hernoemd en sommige typen zijn vervangen door equivalente typen van Xamarin.Essentials.

De volgende tabel toont de .NET MAUI-vervangingen voor de functionaliteit in de Xamarin.Forms.Maps namespace:

Xamarin.Forms API .NET MAUI API Opmerking
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 Geen equivalent voor .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 Leden van type Xamarin.Forms.Maps.Position zijn gewijzigd naar het type Microsoft.Maui.Devices.Sensors.Location.
Xamarin.Forms.Maps.Geocoder Microsoft.Maui.Devices.Sensors.Geocoding Leden van type Xamarin.Forms.Maps.Geocoder zijn gewijzigd naar het type Microsoft.Maui.Devices.Sensors.Geocoding.

.NET MAUI heeft twee Map typen - Microsoft.Maui.Controls.Maps.Map en Microsoft.Maui.ApplicationModel.Map. Omdat de Microsoft.Maui.ApplicationModel namespace een van de global using richtlijnen van .NET MAUI is, moet je bij het gebruik van de Microsoft.Maui.Controls.Maps.Map besturingselement vanuit code je Map gebruik volledig kwalificeren of een using alias gebruiken.

In XAML moet een xmlns namespace-definitie worden toegevoegd voor de Map controle. Hoewel dit niet vereist is, voorkomt het een botsing tussen de Polygon en Polyline types, die in zowel de Microsoft.Maui.Controls.Maps als Microsoft.Maui.Controls.Shapes naamruimten bestaan. Voor meer informatie, zie Een kaart weergeven.

Andere wijzigingen

Een klein aantal andere API's is samengevoegd bij de overgang van Xamarin.Forms naar .NET MAUI. De volgende tabel toont deze wijzigingen.

Xamarin.Forms API .NET MAUI API Opmerkingen
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 In Xamarin.Forms accepteert de ApplyQueryAttributes-methode een IDictionary<string, string>-argument. In .NET MAUI accepteert de ApplyQueryAttributes methode een IDictionary<string, object> argument.
Xamarin.Forms.MenuItem.Icon Microsoft.Maui.Controls.MenuItem.IconImageSource Xamarin.Forms.MenuItem.Icon is de basisklasse van Xamarin.Forms.ToolbarItem, en daarom wordt ToolbarItem.IconToolbarItem.IconImageSource.
Xamarin.Forms.OrientationStateTrigger.Orientation Microsoft.Maui.Controls.OrientationStateTrigger.Orientation In Xamarin.Forms, de OrientationStateTrigger.Orientation eigenschap is van het type Xamarin.Forms.Internals.DeviceOrientation. In .NET MAUI, de OrientationStateTrigger.Orientation-eigenschap is van het type 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 is de basisklasse van Microsoft.Maui.Controls.ToolbarItem, en daarom wordt ToolbarItem.NameToolbarItem.Text.

Bovendien wordt in Xamarin.Forms de Page.OnAppearing override aangeroepen op Android wanneer een app op de achtergrond wordt geplaatst en daarna weer op de voorgrond wordt gehaald. Deze override wordt echter in hetzelfde scenario niet aangeroepen op iOS en Windows. In .NET MAUI wordt de OnAppearing() override niet aangeroepen op platforms wanneer een app op de achtergrond is en vervolgens naar de voorgrond wordt gehaald. In plaats daarvan moet je luisteren naar lifecycle events op Window om op de hoogte te worden gebracht wanneer een app naar de voorgrond terugkeert. Voor meer informatie, zie .NET MAUI windows.

Wijzigingen in inheemse vormen

Native forms in Xamarin.Forms zijn native embedding geworden in .NET MAUI en gebruiken een andere initiëringsmethode en andere uitbreidingsmethoden om platformonafhankelijke controles om te zetten naar hun native typen. Zie Systeemeigen insluitenvoor meer informatie.

Wijzigingen in AssemblyInfo

Eigenschappen die doorgaans worden ingesteld in een AssemblyInfo.cs-bestand zijn nu beschikbaar in je SDK-stijl project. We raden aan om ze in elk project van AssemblyInfo.cs naar uw projectbestand te migreren, en het bestand AssemblyInfo.cs te verwijderen.

Optioneel kunt u het AssemblyInfo.cs-bestand behouden en de GenerateAssemblyInfo-eigenschap in uw projectbestand instellen op false:

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

Voor meer informatie over de GenerateAssemblyInfo-eigenschap, zie GenerateAssemblyInfo.

Werk app-afhankelijkheden bij

Over het algemeen zijn Xamarin.Forms NuGet-pakketten niet compatibel met .NET 8, tenzij ze opnieuw gecompileerd zijn met behulp van .NET target framework monikers (TFM's). Echter, Android-apps kunnen NuGet-pakketten gebruiken die gericht zijn op de monoandroid en monoandroidXX.X frameworks.

U kunt bevestigen dat een pakket compatibel is met .NET 8 door op het tabblad Frameworks op NuGet te kijken voor het pakket dat u gebruikt en te controleren of het een van de compatibele frameworks vermeldt die in de volgende tabel worden weergegeven:

Compatibele frameworks Onverenigbare kaders
net8.0-android, monoandroid, monoandroidXX.X
net8.0-ios monotouch, xamarinios, xamarinios10
net8.0-macos monomac, xamarinmac, xamarinmac20
net8.0-tvos xamarintvos
xamarinwatchos

Opmerking

.NET Standard-bibliotheken die geen afhankelijkheden hebben van de hierboven genoemde incompatibele frameworks zijn nog steeds compatibel met .NET 8.

Als een pakket op NuGet aangeeft compatibel te zijn met een van de hierboven genoemde compatibele frameworks, ongeacht of er ook niet-compatibele frameworks zijn opgenomen, dan is het pakket compatibel. Compatibele NuGet-pakketten kunnen aan je .NET MAUI-bibliotheekproject worden toegevoegd via de NuGet-pakketbeheerder in Visual Studio.

Als je geen .NET 8-compatibele versie van een NuGet-pakket kunt vinden, moet je:

  • Compileer het pakket opnieuw met .NET TFM's als u de eigenaar bent van de code.
  • Zoek naar een preview-versie van een .NET 8-versie van het pakket.
  • Vervang de afhankelijkheid door een .NET 8-compatibel alternatief.

Compileer en zoek problemen op

Zodra uw afhankelijkheden zijn opgelost, moet u uw project bouwen. Eventuele fouten helpen u bij de volgende stappen.

Hint

  • Verwijder alle bin - en obj-mappen uit alle projecten voordat u projecten opent en bouwt in Visual Studio, met name wanneer u .NET-versies wijzigt.
  • Verwijder het gegenereerde bestand Resource.designer.cs uit het Android-project.

De volgende tabel biedt richtlijnen voor het oplossen van veelvoorkomende build- of runtimeproblemen.

Probleem Hint
Xamarin.* naamruimte bestaat niet. Werk de namespace bij naar het .NET MAUI-equivalent. Voor meer informatie, zie Namespace-wijzigingen.
API bestaat niet. Werk de API-gebruik bij naar het .NET MAUI-equivalent. Voor meer informatie, zie API changes.
De app wil niet worden ingezet. Zorg ervoor dat het vereiste platformproject is ingesteld om te implementeren in Visual Studio's Configuration Manager.
App start niet op. Update elke platformproject-entrypuntklasse en het app-entrypunt. Voor meer informatie, zie Bootstrap je gemigreerde app.
CollectionView scrollt niet. Controleer de containerindeling en de gemeten grootte van het CollectionView. Standaard neemt de controle zoveel ruimte in als de container toestaat. Een Grid beperkt kinderen tot zijn eigen grootte. Een StackLayout stelt kinderen echter in staat om ruimte in te nemen buiten zijn grenzen.
De pop-up wordt onderaan de pagina weergegeven op iOS. In Xamarin.Forms zijn alle pop-ups op iOS UIWindow-instanties, maar in .NET MAUI worden pop-ups weergegeven door de huidige presenterende ViewController te lokaliseren en de pop-up weer te geven met PresentViewControllerAsync. In invoegtoepassingen zoals Mopups, om ervoor te zorgen dat uw pop-ups correct worden weergegeven, moet u DisplayAlert aanroepen (of DisplayAlertAsync in .NET 10+), DisplayActionSheet (of DisplayActionSheetAsync in .NET 10+), of DisplayPromptAsync vanuit de ContentPage die wordt gebruikt binnen de Mopup pop-up.
BoxView wordt niet weergegeven. De standaardgrootte van een BoxView in Xamarin.Forms is 40x40. De standaardgrootte van een BoxView in .NET MAUI is 0x0. Stel WidthRequest en HeightRequest in op 40.
De opmaak mist opvulling, marge of ruimte. Voeg standaardwaarden toe aan uw project op basis van de .NET MAUI stijlhulpbron. Voor meer informatie, zie Standaardwaarde veranderingen van Xamarin.Forms.
Aangepaste layout werkt niet. Aangepaste lay-outcode moet worden bijgewerkt om te werken in .NET MAUI. Voor meer informatie, zie Aangepaste lay-outwijzigingen.
Aangepaste renderer werkt niet. Renderer-code moet bijgewerkt worden om te werken in .NET MAUI. Voor meer informatie, zie Use custom renderers in .NET MAUI.
Effect werkt niet. De effectcode moet worden bijgewerkt om te werken in .NET MAUI. Zie Use effects in .NET MAUI voor meer informatie.
SkiaSharp code werkt niet. SkiaSharp code heeft kleine updates nodig om te kunnen werken in .NET MAUI. Voor meer informatie, zie Code opnieuw SkiaSharp gebruiken in .NET MAUI.
Kan geen toegang krijgen tot eerder gemaakte app-eigenschapgegevens. Migreer de gegevens van de app-eigenschappen naar .NET MAUI-voorkeuren. Zie voor meer informatie Gegevens uit de eigenschappenwoordenlijst van de Xamarin.Forms app migreren naar .NET MAUI-voorkeuren.
Kan geen toegang krijgen tot eerder gemaakte beveiligde opslaggegevens. Migreer de gegevens van beveiligde opslag naar .NET MAUI. Zie Migreren van Xamarin.Essentials beveiligde opslag naar .NET MAUI beveiligde opslag voor meer informatie.
Kan geen toegang krijgen tot eerder gemaakte versievolggegevens. Migreer de versietraceringsgegevens naar .NET MAUI. Voor meer informatie, zie Versietraceringsgegevens migreren van een Xamarin.Forms app naar een .NET MAUI-app.

Zie ook