Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
När du uppgraderar en app för flera projekt Xamarin.Forms till en .NET Multi-platform App UI-app (.NET MAUI) följer du samma steg som ett Xamarin.Android- och Xamarin.iOS-projekt, med ytterligare steg för att dra nytta av ändringarna i .NET MAUI.
Den här artikeln beskriver hur du migrerar ett Xamarin.Forms biblioteksprojekt manuellt till ett .NET MAUI-biblioteksprojekt. Innan du gör det måste du uppdatera dina Xamarin.Forms plattformsprojekt till SDK-liknande projekt. SDK-projekt är samma projektformat som används av alla .NET-arbetsbelastningar, och jämfört med många Xamarin-projekt är de mycket mindre utförliga. Information om hur du uppdaterar dina appprojekt finns i Uppgradera Xamarin.Android-, Xamarin.iOS- och Xamarin.Mac-projekt till .NET-, Xamarin.Android-projektmigrering, Xamarin Apple-projektmigrering och Xamarin.Forms UWP-projektmigrering.
Om du vill migrera ett Xamarin.Forms biblioteksprojekt till ett .NET MAUI-biblioteksprojekt måste du:
- Uppdatera din Xamarin.Forms app för att använda Xamarin.Forms 5.
- Uppdatera appens beroenden till de senaste versionerna.
- Se till att appen fortfarande fungerar.
- Uppdatera projektfilen till SDK-format.
- Uppdatera namnrymder.
- Hantera eventuella ändringar i API:et.
- Konfigurera .NET MAUI.
- Uppgradera eller ersätt inkompatibla beroenden med .NET 8-versioner.
- Kompilera och testa din app.
För att förenkla uppgraderingsprocessen bör du skapa ett nytt .NET MAUI-biblioteksprojekt med samma namn som biblioteksprojektet Xamarin.Forms och sedan kopiera i koden, konfigurationen och resurserna. Detta är det tillvägagångssätt som beskrivs nedan.
Uppdatera din Xamarin.Forms-app
Innan du uppgraderar din Xamarin.Forms-app till .NET MAUI bör du först uppdatera din Xamarin.Forms-app till att använda Xamarin.Forms 5 och se till att den fortfarande körs korrekt. Dessutom bör du uppdatera beroenden som din app använder till de senaste versionerna.
Detta kommer att hjälpa till att förenkla resten av migrationsprocessen, eftersom det kommer att minimera API-skillnaderna mellan Xamarin.Forms och .NET MAUI, och kommer att säkerställa att du använder .NET-kompatibla versioner av dina beroenden om de finns.
Skapa ett nytt projekt
I Visual Studio skapar du ett nytt .NET MAUI-klassbiblioteksprojekt med samma namn som biblioteksprojektet Xamarin.Forms . Det här projektet kommer att vara värd för koden från biblioteksprojektet Xamarin.Forms . Om du öppnar projektfilen bekräftas att du har ett .NET SDK-liknande projekt:
<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>
I dina plattformsprojekt lägger du till en referens till det nya biblioteksprojektet. Kopiera sedan dina Xamarin.Forms biblioteksfiler till .NET MAUI-biblioteksprojektet.
Namnrymmesändringar
Namnrymder har förändrats i övergången från Xamarin.Forms till .NET MAUI, och Xamarin.Essentials-funktioner är nu en del av .NET MAUI. För att göra uppdateringar av namnrymder, utför en sökning och ersättning för följande namnrymder:
.NET MAUI-projekt använder sig av implicita global using direktiv. Den här funktionen möjliggör att du kan ta bort using-direktiv för Xamarin.Essentials-namnutrymmet, utan att behöva ersätta dem med motsvarande .NET MAUI-namnutrymmen.
Dessutom har det förvalda XAML-namnområdet ändrats från http://xamarin.com/schemas/2014/forms i Xamarin.Forms till http://schemas.microsoft.com/dotnet/2021/maui i .NET MAUI. Därför bör du byta ut alla förekomster av xmlns="http://xamarin.com/schemas/2014/forms" mot xmlns="http://schemas.microsoft.com/dotnet/2021/maui".
Anmärkning
Du kan snabbt uppdatera dina Xamarin.Forms namnområden till Microsoft.Maui genom att använda Snabba åtgärder i Visual Studio, förutsatt att du har Upgrade Assistant installerat.
API-ändringar
Vissa API:er har ändrats i övergången från Xamarin.Forms till .NET MAUI. Detta beror på flera anledningar, inklusive att ta bort duplicerad funktionalitet som orsakas av att Xamarin.Essentials blir en del av .NET MAUI, och säkerställa att API:erna följer .NET:s namngivningsriktlinjer. Följande avsnitt diskuterar dessa förändringar.
Färgändringar
I Xamarin.Forms låter Xamarin.Forms.Color strukturen dig konstruera Color objekt med hjälp av double värden, och tillhandahåller namngivna färger, såsom Xamarin.Forms.Color.AliceBlue. I .NET MAUI har denna funktionalitet delats upp i Microsoft.Maui.Graphics.Color-klassen och Microsoft.Maui.Graphics.Colors-klassen.
Klasserna Microsoft.Maui.Graphics.Color, i namnområdet Microsoft.Maui.Graphics, gör det möjligt att konstruera Color-objekt med hjälp av float-värden, byte-värden och int-värden.
Microsoft.Maui.Graphics.Colors-klassen, som också finns i Microsoft.Maui.Graphics-namnområdet, tillhandahåller i stort sett samma namngivna färger. Till exempel, använd Colors.AliceBlue för att specificera AliceBlue färg.
Tabellen nedan visar API-ändringarna mellan Xamarin.Forms.Color struct och Microsoft.Maui.Graphics.Color klass.
| Xamarin.Forms API | .NET MAUI API | Kommentar |
|---|---|---|
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 egenskap ersattes med en metod i .NET MAUI. |
Xamarin.Forms.Color.Saturation |
Microsoft.Maui.Graphics.Color.GetSaturation | Xamarin.Forms egenskap ersattes med en metod i .NET MAUI. |
Xamarin.Forms.Color.Luminosity |
Microsoft.Maui.Graphics.Color.GetLuminosity | Xamarin.Forms egenskap ersattes med en metod i .NET MAUI. |
Xamarin.Forms.Color.Default |
Ingen motsvarighet för .NET MAUI. Istället har Microsoft.Maui.Graphics.Color objekt som standard null. |
|
Xamarin.Forms.Color.Accent |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.Color.FromHex |
Microsoft.Maui.Graphics.Color.FromArgb | Microsoft.Maui.Graphics.Color.FromHex är föråldrad och kommer att tas bort i en framtida version. |
Dessutom är alla numeriska värden i en Microsoft.Maui.Graphics.Colorfloat istället för double som används i Xamarin.Forms.Color.
Anmärkning
Till skillnad från Xamarin.Forms har en Microsoft.Maui.Graphics.Color inte en implicit omvandling till System.Drawing.Color.
Ändringar i layouten
Följande tabell listar de layout-API:er som har tagits bort i övergången från Xamarin.Forms till .NET MAUI.
| Xamarin.Forms API | .NET MAUI API | Kommentarer |
|---|---|---|
Xamarin.Forms.AbsoluteLayout.IAbsoluteList<T>.Add |
Den Add överlagring som accepterar tre argument finns inte i .NET MAUI. |
|
Xamarin.Forms.Grid.IGridList<T>.AddHorizontal |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.Grid.IGridList<T>.AddVertical |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.RelativeLayout |
Microsoft.Maui.Controls.Compatibility.RelativeLayout | I .NET MAUI, finns RelativeLayout endast som en kompatibilitetskontroll för användare som migrerar från Xamarin.Forms. Använd Grid istället, eller lägg till xmlns för kompatibilitetsnamnrymden. |
Dessutom görs tillägg av barn till en layout i kod i Xamarin.Forms genom att lägga till barnen i layoutens Children-samling.
Grid grid = new Grid();
grid.Children.Add(new Label { Text = "Hello world" });
I .NET MAUI är Children-samlingen för internt bruk av .NET MAUI och bör inte manipuleras direkt. Därför bör barn i kod läggas direkt till layouten.
Grid grid = new Grid();
grid.Add(new Label { Text = "Hello world" });
Viktigt!
Alla Add layoututökningar, såsom GridExtensions.Add, anropas på layouten snarare än på layoutens Children-samling.
Du kanske märker när du kör din uppgraderade .NET MAUI-app att layoutbeteendet är annorlunda. För mer information, se Layout-beteendeförändringar från Xamarin.Forms.
Anpassade layoutändringar
Processen för att skapa en anpassad layout i Xamarin.Forms innebär att skapa en klass som härleder från Layout<View> och överrida metoderna VisualElement.OnMeasure och Layout.LayoutChildren. För mer information, se Skapa en anpassad layout i Xamarin.Forms.
I .NET MAUI härstammar layoutklasserna från den abstrakta Layout klassen. Denna klass delegerar plattformsoberoende layout och mätning till en layout manager klass. Varje layout-hanterarklass implementerar ILayoutManager-gränssnittet, vilket anger att implementeringar av Measure och ArrangeChildren måste tillhandahållas.
- Measure implementeringen anropar IView.Measure på varje vy i layouten och returnerar layoutens totala storlek med givna begränsningar.
- Implementeringen ArrangeChildren avgör var varje vy ska placeras inom layoutens gränser och anropar Arrange på varje vy med dess rätta gränser. Returvärdet är den faktiska storleken på layouten.
För mer information, se Custom layouts.
Enhetsändringar
Xamarin.Forms har en Xamarin.Forms.Device-klass som hjälper dig att interagera med den enhet och plattform appen körs på. Den motsvarande klassen i .NET MAUI, Microsoft.Maui.Controls.Device, är föråldrad och dess funktionalitet har ersatts av flera typer.
Tabellen nedan visar .NET MAUI-ersättningar för funktionaliteten i Xamarin.Forms.Device-klassen.
| Xamarin.Forms API | .NET MAUI API | Kommentarer |
|---|---|---|
Xamarin.Forms.Device.Android |
Microsoft.Maui.Devices.DevicePlatform.Android | |
Xamarin.Forms.Device.iOS |
Microsoft.Maui.Devices.DevicePlatform.iOS | |
Xamarin.Forms.Device.GTK |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.Device.macOS |
Ingen motsvarighet för .NET MAUI. Använd Microsoft.Maui.Devices.DevicePlatform.MacCatalysti stället . | |
Xamarin.Forms.Device.Tizen |
Microsoft.Maui.Devices.DevicePlatform.Tizen | |
Xamarin.Forms.Device.UWP |
Microsoft.Maui.Devices.DevicePlatform.WinUI | |
Xamarin.Forms.Device.WPF |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.Device.Flags |
Ingen motsvarighet för .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 |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.Device.GetNamedSize |
Ingen motsvarighet för .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 |
Ingen motsvarighet för .NET MAUI. | |
Xamarin.Forms.Device.SetFlowDirection |
Microsoft.Maui.Controls.Window.FlowDirection | |
Xamarin.Forms.Device.StartTimer |
Microsoft.Maui.Dispatching.DispatcherExtensions.StartTimer eller Microsoft.Maui.Dispatching.Dispatcher.DispatchDelayed |
Kartändringar
I Xamarin.Forms är Map-kontrollen och associerade typer i Xamarin.Forms.Maps-namnområdet. I .NET MAUI har denna funktionalitet flyttats till Microsoft.Maui.Controls.Maps och Microsoft.Maui.Maps-namnrymderna. Vissa egenskaper har bytt namn och vissa typer har ersatts med motsvarande typer från Xamarin.Essentials.
Följande tabell visar .NET MAUI-ersättningar för funktionaliteten i Xamarin.Forms.Maps-namnområdet:
| Xamarin.Forms API | .NET MAUI API | Kommentar |
|---|---|---|
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 |
Ingen motsvarighet för .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 | Medlemmar av typen Xamarin.Forms.Maps.Position har ändrats till typen Microsoft.Maui.Devices.Sensors.Location. |
Xamarin.Forms.Maps.Geocoder |
Microsoft.Maui.Devices.Sensors.Geocoding | Medlemmar av typen Xamarin.Forms.Maps.Geocoder har ändrats till typen Microsoft.Maui.Devices.Sensors.Geocoding. |
.NET MAUI har två Map typer - Microsoft.Maui.Controls.Maps.Map och Microsoft.Maui.ApplicationModel.Map. Eftersom Microsoft.Maui.ApplicationModel namnrymden är en av .NET MAUI:s global using-direktiv måste du, när du använder Microsoft.Maui.Controls.Maps.Map-kontrollen från kod, antingen fullt specificera din Map-användning eller använda en alias med using.
I XAML bör en xmlns namnområdesdefinition läggas till för Map kontrollen. Även om detta inte är obligatoriskt, förhindrar det en kollision mellan typerna Polygon och Polyline, som existerar i både Microsoft.Maui.Controls.Maps och Microsoft.Maui.Controls.Shapes namnområdena. För mer information, se Visa en karta.
Andra ändringar
Ett litet antal andra API:er har blivit konsoliderade i övergången från Xamarin.Forms till .NET MAUI. Följande tabell visar dessa ändringar:
| Xamarin.Forms API | .NET MAUI API | Kommentarer |
|---|---|---|
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 | I Xamarin.Forms accepterar ApplyQueryAttributes-metoden ett IDictionary<string, string>-argument. I .NET MAUI accepterar metoden ApplyQueryAttributes ett argument IDictionary<string, object>. |
Xamarin.Forms.MenuItem.Icon |
Microsoft.Maui.Controls.MenuItem.IconImageSource |
Xamarin.Forms.MenuItem.Icon är basklassen för Xamarin.Forms.ToolbarItem, och därför blir ToolbarItem.IconToolbarItem.IconImageSource. |
Xamarin.Forms.OrientationStateTrigger.Orientation |
Microsoft.Maui.Controls.OrientationStateTrigger.Orientation | I Xamarin.Forms är egenskapen OrientationStateTrigger.Orientation av typen Xamarin.Forms.Internals.DeviceOrientation. I .NET MAUI är egenskapen OrientationStateTrigger.Orientation av typen 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 är basklassen för Microsoft.Maui.Controls.ToolbarItem, och därför blir ToolbarItem.NameToolbarItem.Text. |
Dessutom, i Xamarin.Forms, kallas Page.OnAppearing override på Android när en app går i bakgrunden och sedan återgår till förgrunden. Denna åsidosättning anropas dock inte på iOS och Windows i samma scenario. I .NET MAUI kallas inte OnAppearing() override på någon plattform när en app är i bakgrunden och sedan tas fram i förgrunden. Istället bör du lyssna på livscykelhändelser på Window för att bli meddelad när en app återgår till förgrunden. För mer information, se .NET MAUI windows.
Förändringar i ursprungliga former
Native forms i Xamarin.Forms har blivit native embedding i .NET MAUI och använder en annan initialiseringsmetod samt olika förlängningsmetoder för att konvertera plattformsövergripande kontroller till deras inhemska typer. Mer information finns i intern inbäddning.
Starta din migrerade app
När du uppdaterar en Xamarin.Forms app till .NET MAUI manuellt måste du aktivera .NET MAUI-stöd i varje plattformsprojekt, uppdatera startpunktsklassen för varje plattformsprojekt och sedan konfigurera startsteget för .NET MAUI-appen.
Aktivera .NET MAUI i plattformsprojekt
Innan du uppdaterar startpunktsklassen för varje plattformsprojekt måste du först aktivera .NET MAUI-stöd. Detta kan uppnås genom att ställa in byggegenskapen $(UseMaui) på true i varje plattformsprojekt:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<UseMaui>true</UseMaui>
</PropertyGroup>
</Project>
Viktigt!
Du måste lägga till <UseMaui>true</UseMaui> i projektfilen för att aktivera .NET MAUI-stöd. Se dessutom till att du har lagt <EnableDefaultMauiItems>false</EnableDefaultMauiItems> till i WinUI-projektfilen. Detta hindrar dig från att få byggfel om den InitializeComponent metod som redan har definierats.
Lägg till paketreferenser
I .NET 8 levereras .NET MAUI som en .NET-arbetsbelastning och flera NuGet-paket. Fördelen med den här metoden är att du enkelt kan fästa dina projekt på specifika versioner, samtidigt som du enkelt kan förhandsgranska outgivna eller experimentella versioner.
Du bör lägga till följande explicita paketreferenser till en <ItemGroup> i varje projektfil:
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
Variabeln $(MauiVersion) refereras från den version av .NET MAUI som du har installerat. Du kan åsidosätta detta genom att lägga till byggegenskapen $(MauiVersion) i varje projektfil:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
Konfiguration av Android-projekt
I ditt .NET MAUI Android-projekt uppdaterar du klassen så att den MainApplication matchar koden nedan:
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();
}
}
Uppdatera även klassen så att den MainActivity ärver från 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);
}
}
}
Uppdatera sedan manifestfilen för att ange att minSdKVersion är 21, vilket är den lägsta Android SDK-version som krävs av .NET MAUI. Detta kan uppnås genom att ändra <uses-sdk />-noden, som är en underordnad nod till <manifest>-noden.
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="32" />
Konfiguration av iOS-projekt
I ditt .NET MAUI iOS-projekt uppdaterar du klassen så att den AppDelegate ärver från 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();
}
}
Uppdatera sedan Info.plist så att det MinimumOSVersion är 11.0, vilket är den lägsta iOS-version som krävs av .NET MAUI.
UWP-projektkonfiguration
I ditt .NET MAUI WinUI 3-projekt uppdaterar du App.xaml så att det matchar koden nedan:
<?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>
Anmärkning
Om projektet inkluderade resurser i din befintliga App.xaml bör du migrera dem till den nya versionen av filen.
Uppdatera även App.xaml.cs för att matcha koden nedan:
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();
}
Anmärkning
Om ditt projekt inkluderade affärslogik i App.xaml.cs bör du migrera den logiken till den nya versionen av filen.
Lägg sedan till en launchSettings.jsonfil i projektets egenskapsmapp och lägg till följande JSON i filen:
{
"profiles": {
"Windows Machine": {
"commandName": "MsixPackage",
"nativeDebugging": true
}
}
}
Startpunkt för app
.NET MAUI-appar har en enda plattformsoberoende appinmatningspunkt. Varje plattformsinmatningspunkt anropar en CreateMauiApp metod för den statiska MauiProgram klassen och returnerar en MauiApp.
Lägg därför till en ny klass med namnet MauiProgram som innehåller följande kod:
namespace YOUR_NAMESPACE_HERE;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>();
return builder.Build();
}
}
Anmärkning
För Xamarin.Forms UWP-projekt finns referensen App i builder.UseMauiApp<App>() i filen MainPage.xaml.cs .
Om det finns plattformspecifika tjänster som behöver migreras till .NET MAUI, använd metoden AddTransient(IServiceCollection, Type) för att lägga till en övergående tjänst av den angivna typen till den specificerade IServiceCollection.
Anmärkning
Du kan snabbt uppdatera dina Xamarin.Forms namnområden till Microsoft.Maui genom att använda Snabba åtgärder i Visual Studio, förutsatt att du har Upgrade Assistant installerat.
Ändringar i AssemblyInfo
Egenskaper som vanligtvis ställs in i en AssemblyInfo.cs-fil är nu tillgängliga i ditt projekt med SDK-stil. Vi rekommenderar att ni migrerar dem från AssemblyInfo.cs till er projektfil i varje projekt, och tar bort AssemblyInfo.cs-filen.
Du kan välja att behålla AssemblyInfo.cs-filen och ställa in GenerateAssemblyInfo-egenskapen i din projektfil till false:
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
För mer information om egenskapen GenerateAssemblyInfo, se GenerateAssemblyInfo.
Uppdatera appens beroenden
Generellt sett är Xamarin.Forms NuGet-paket inte kompatibla med .NET 8 om de inte har kompilerats om med hjälp av .NET target framework monikers (TFMs). Android-appar kan dock använda NuGet-paket som riktar sig mot monoandroid och monoandroidXX.X-ramverken.
Du kan bekräfta att ett paket är kompatibelt med .NET 8 genom att titta på fliken Frameworks på NuGet för det paket du använder, och kontrollera att det listar ett av de kompatibla ramverken som visas i tabellen nedan.
| Kompatibla ramverk | Oförenliga ramverk |
|---|---|
| net8.0-android, monoandroid, monoandroidXX.X | |
| net8.0-ios | monotouch, xamarinios, xamarinios10 |
| net8.0-macos | monomac, xamarinmac, xamarinmac20 |
| net8.0-tvos | xamarintvos |
| xamarinwatchos |
Anmärkning
.NET Standard-bibliotek som inte har några beroenden av de inkompatibla ramverken som nämns ovan är fortfarande kompatibla med .NET 8.
Om ett paket på NuGet indikerar kompatibilitet med någon av de ovan nämnda kompatibla ramverken, oavsett om det också inkluderar inkompatibla ramverk, är paketet kompatibelt. Kompatibla NuGet-paket kan läggas till ditt .NET MAUI-biblioteksprojekt med hjälp av NuGet-pakethanteraren i Visual Studio.
Om du inte kan hitta en version av ett NuGet-paket som är kompatibel med .NET 8 bör du:
- Kompilera om paketet med .NET TFMs, om du äger koden.
- Leta efter en förhandsversion av en .NET 8-version av paketet.
- Ersätt beroendet med ett alternativ som är kompatibelt med .NET 8.
Kompilera och felsök
När dina beroenden är lösta bör du bygga ditt projekt. Eventuella fel kommer att vägleda dig mot nästa steg.
Tips/Råd
- Radera alla bin och obj mappar från alla projekt innan du öppnar och bygger projekt i Visual Studio, särskilt när du byter .NET-versioner.
- Ta bort den genererade filen Resource.designer.cs från Android-projektet.
Tabellen nedan ger vägledning för att övervinna vanliga bygg- eller körtidsproblem.
| Problematik | Tips/Råd |
|---|---|
Xamarin.* namnområde finns inte. |
Uppdatera namnområdet till dess .NET MAUI-motsvarighet. För mer information, se namnrymdändringar. |
| API finns inte. | Uppdatera API-användningen till dess .NET MAUI-ekvivalent. För mer information, se API-ändringar. |
| Appen kommer inte att distribueras. | Se till att det nödvändiga plattformsprojektet är inställt för distribution i Visual Studios konfigurationshanterare. |
| Appen startas inte. | Uppdatera varje plattformsprojekts ingångspunkt för klassen och appens ingångspunkt. För mer information, se förbered din migrerade app. |
| CollectionView scrollar inte. | Kontrollera containerlayouten och den uppmätta storleken på CollectionView. Som standard kommer kontrollen att ta upp så mycket utrymme som behållaren tillåter. Ett Grid begränsar barnen till sin egen storlek. Men en StackLayout möjliggör för barn att ta upp plats utanför dess gränser. |
| Popup visas under sidan på iOS. | I Xamarin.Forms är alla pop-ups på iOS UIWindow instanser men i .NET MAUI visas pop-ups genom att lokalisera den aktuella presenterande ViewController och visa pop-upen med PresentViewControllerAsync. För att säkerställa att dina popup-fönster visas korrekt i plugin-program som Mopups bör du anropa DisplayAlert (eller DisplayAlertAsync i .NET 10+), DisplayActionSheet (eller DisplayActionSheetAsync i .NET 10+) eller DisplayPromptAsync från ContentPage det som används i popup-fönstret Mopup . |
| BoxView syns inte. | Standardstorleken på en BoxView i Xamarin.Forms är 40x40. Standardstorleken för en BoxView i .NET MAUI är 0x0. Ställ in WidthRequest och HeightRequest på 40. |
| Layouten saknar polstring, marginal eller mellanrum. | Lägg till standardvärden i ditt projekt baserat på .NET MAUI stilresurs. För mer information, se Standardvärdesändringar från Xamarin.Forms. |
| Anpassad layout fungerar inte. | Anpassad layoutkod måste uppdateras för att fungera i .NET MAUI. För mer information, se Custom layout changes. |
| Den anpassade renderaren fungerar inte. | Renderingskoden behöver uppdateras för att fungera i .NET MAUI. För mer information, se Use custom renderers in .NET MAUI. |
| Effekten fungerar inte. | Effektkoden behöver uppdateras för att fungera i .NET MAUI. För mer information, se Använd effekter i .NET MAUI. |
| SkiaSharp koden fungerar inte. | SkiaSharp koden behöver mindre uppdateringar för att fungera i .NET MAUI. Mer information finns i Återanvänd SkiaSharp kod i .NET MAUI. |
| Kan inte nå appens tidigare skapade egenskapsdata. | Migrera appens egenskapsdata till .NET MAUI-inställningar. För mer information, se Migrera data från Xamarin.Forms appens egenskapsordbok till .NET MAUI inställningar. |
| Kan inte komma åt tidigare skapade säkert lagrade data. | Migrera data från säker lagring till .NET MAUI. För mer information, se Migrera från Xamarin.Essentials säker lagring till .NET MAUI säker lagring. |
| Kan inte komma åt tidigare skapad versionsspårningsdata. | Migrera versionsspårningsdata till .NET MAUI. För mer information, se Migrera versionsspårningsdata från en Xamarin.Forms app till en .NET MAUI-app. |