Novità di .NET MAUI per .NET 8
L'obiettivo di .NET MAUI in .NET 8 è la qualità. In .NET 8 le richieste pull 1618 sono state unite che hanno chiuso 689 problemi. Sono incluse le modifiche apportate dal team MAUI di .NET e dalla community MAUI di .NET. Queste modifiche dovrebbero comportare un aumento significativo della qualità in .NET 8.
Importante
A causa dell'uso di dipendenze esterne sottostanti, ad esempio Xcode o Android SDK Tools, i criteri di supporto dell'interfaccia utente dell'app multipiattaforma .NET (.NET MAUI) differiscono dai criteri di supporto di .NET e .NET Core. Per altre informazioni, vedere Criteri di supporto di .NET MAUI.
In .NET 8, .NET MAUI viene fornito come carico di lavoro .NET e più pacchetti NuGet. Il vantaggio di questo approccio è che consente di aggiungere facilmente i progetti a versioni specifiche, consentendo allo stesso tempo di visualizzare facilmente l'anteprima di build non definitive o sperimentali. Quando si crea un nuovo progetto MAUI .NET, i pacchetti NuGet necessari vengono aggiunti automaticamente al progetto.
Questo articolo elenca le nuove funzionalità di .NET MAUI per .NET 8 e fornisce collegamenti a informazioni più dettagliate su ognuna.
Per informazioni sulle novità di .NET 8, vedere Novità di .NET 8.
Nuove funzionalità
Anche se l'obiettivo di questa versione di .NET MAUI è la qualità, sono disponibili anche alcune nuove funzionalità che consentono nuovi scenari nelle app.
Controlli
- Controlli che supportano i metodi di estensione per l'input di testo che supportano nascondere e visualizzare la tastiera di input flessibile. Per altre informazioni, vedere Nascondere e visualizzare la tastiera di input soft.
- La ContentPage classe ottiene una HideSoftInputOnTapped proprietà, che indica se toccando un punto qualsiasi della pagina, la tastiera di input leggero verrà nascosta se è visibile. Per altre informazioni, vedere ContentPage.
- BlazorWebView ottiene una proprietà, un StartPath TryDispatchAsync metodo e funzionalità di registrazione avanzate. Per altre informazioni, vedere Ospitare un'app Web Blazor in un'app MAUI .NET con BlazorWebView.
- WebView ottiene una UserAgent proprietà. Per altre informazioni, vedere WebView.
- La riproduzione multimediale inline del video HTML5, inclusa la riproduzione automatica e l'immagine nell'immagine, è stata abilitata per impostazione predefinita per in WebView iOS. Per altre informazioni, vedere Impostare le preferenze di riproduzione multimediale in iOS e Mac Catalyst.
- L'overload
Grid.Add
che accetta 5 argomenti è stato aggiunto di nuovo a .NET MAUI. Tuttavia, questo metodo è deprecato ed è presente solo per facilitare le migrazioni da Xamarin.Forms. - Grid ottiene un AddWithSpan metodo di estensione che aggiunge una visualizzazione all'oggetto Grid in corrispondenza della riga e della colonna specificata con gli intervalli di riga e colonna specificati.
Desktop
- Le voci della barra dei menu e le voci del menu di scelta rapida possono essere richiamate tramite tasti di scelta rapida noti come tasti di scelta rapida. Per altre informazioni, vedere Acceleratori di tastiera.
- Le app di Windows possono essere pubblicate come app non in pacchetto. Per altre informazioni, vedere Pubblicare un'app MAUI .NET non in pacchetto per Windows con l'interfaccia della riga di comando.
Strumenti di riconoscimento dei movimenti
- PointerGestureRecognizerottiene PointerPressedCommand, , PointerPressedCommandParameter, PointerReleasedCommandParameter PointerReleasedCommandproprietà ed eventi .PointerPressed PointerReleased Per altre informazioni, vedere Riconoscere un movimento del puntatore.
- L'oggetto PointerEventArgs che accompagna gli eventi del puntatore generati dalla PointerGestureRecognizer classe ottiene una PlatformArgs proprietà di tipo PlatformPointerEventArgs. Questa proprietà fornisce l'accesso agli argomenti specifici della piattaforma per un evento di movimento del puntatore. Per altre informazioni, vedere Riconoscere un movimento del puntatore.
- Gli DragStartingEventArgsoggetti , DropEventArgsDragEventArgs, e DropCompletedEventArgs che accompagnano gli eventi di movimento di trascinamento e rilascio ottengono
PlatformArgs
ogni proprietà. Questa proprietà fornisce l'accesso agli argomenti specifici della piattaforma per un evento di trascinamento o rilascio. Per altre informazioni, vedere Riconoscere un movimento di trascinamento della selezione. - La posizione in cui si è verificato un movimento di trascinamento o rilascio può essere ottenuta chiamando il GetPosition metodo su un DragEventArgsoggetto , DragStartingEventArgso DropEventArgs . Per altre informazioni, vedere Riconoscere un movimento di trascinamento della selezione.
- La TapGestureRecognizer classe ottiene la possibilità di gestire i tap secondari su Android. Per altre informazioni, vedere Riconoscere un movimento di tocco.
Navigazione
- Lo spostamento nella shell ottiene un GoToAsync overload che consente di passare dati di navigazione singoli, cancellati dopo che si è verificato lo ShellNavigationQueryParameters spostamento, come oggetto . Per altre informazioni, vedere Passare dati di spostamento basati su oggetti singolo.
Integrazione della piattaforma
- La Geolocation classe può restare in ascolto delle modifiche alla posizione quando l'app è in primo piano. Per altre informazioni, vedere Listen for location changes.For more information, see Listen for location changes.
- Flashlight ottiene un IsSupportedAsync metodo che determina se una torcia è disponibile nel dispositivo. Per altre informazioni, vedere Flashlight.
- SensorSpeed gli intervalli sono stati unificati in tutte le piattaforme. Per altre informazioni, vedere Accesso ai sensori dei dispositivi.
- La Permissions classe ottiene l'autorizzazione Permissions.Bluetooth , ovvero un'autorizzazione Android 12 per la ricerca di dispositivi Bluetooth, rendendo il dispositivo corrente individuabile ad altri dispositivi Bluetooth e comunicando con dispositivi Bluetooth già associati. Per altre informazioni, vedere Autorizzazioni.
- La Permissions classe ottiene l'autorizzazione, ovvero un'autorizzazione Android 13 per l'accesso Permissions.NearbyWifiDevices ai dispositivi WiFi nelle vicinanze. Per altre informazioni, vedere Autorizzazioni.
XAML
- L'attributo
x:ClassModifier
può essere specificato nelle classi XAML per controllare il livello di accesso per una classe generata in un assembly. Per altre informazioni, vedere Modificatori di classi. - Le risorse definite in un ResourceDictionary oggetto possono essere utilizzate anche in un
AppThemeBinding
oggetto con l'estensioneDynamicResource
di markup. Per altre informazioni, vedere Definire e usare le risorse del tema. - Color è l'oggetto
ContentProperty
della SolidColorBrush classe e pertanto non deve essere impostato in modo esplicito da XAML.
Risoluzione dei problemi
- Ai fini della risoluzione dei problemi, la generazione delle risorse può essere disabilitata. Per altre informazioni, vedere Disabilitare la creazione di pacchetti di immagini, Disabilitare la creazione di pacchetti della schermata iniziale, Disabilitare la creazione di pacchetti di tipi di carattere e Disabilitare la creazione di pacchetti di file di asset.
- Ai fini della risoluzione dei problemi, è possibile generare una schermata iniziale vuota. Per altre informazioni, vedere Generare una schermata iniziale vuota.
- Il ridimensionatore verifica la presenza di nomi file di immagine duplicati. Per altre informazioni, vedere Errori di nome file di immagine duplicati.
Varie
- La gestione delle finestre può essere disaccoppiata dalla
App
classe . Per altre informazioni, vedere Separare la gestione delle finestre dalla classe App. - Diversi tipi di carattere di sistema possono essere usati facilmente nelle app Android. Per altre informazioni, vedere Utilizzare i tipi di carattere.
- In iOS ottiene
MauiUIApplicationDelegate
unPerformFetch
metodo che può essere sottoposto a override o utilizzato tramite iliOSLifecycle.PerformFetch
delegato. Per altre informazioni, vedere Eventi del ciclo di vita della piattaforma iOS e Mac Catalyst.
Deprecazione e rimozione dei tipi
I tipi o i membri seguenti sono stati deprecati:
- ClickGestureRecognizer è stato deprecato.
- Le
AutomationProperties.Name
proprietà associate ,AutomationProperties.HelpText
eAutomationProperties.LabeledBy
sono state deprecate. - L'oggetto FocusChangeRequested è stato deprecato. Usare invece il Focus() metodo per tentare di impostare lo stato attivo sulla visualizzazione.
Sono stati rimossi i tipi o i membri seguenti:
- La proprietà e
Application.SavePropertiesAsync
ilApplication.Properties
metodo sono stati rimossi. Per eseguire la migrazione dei dati delle proprietà dell'app a .NET MAUI, vedere Eseguire la migrazione dei dati dal dizionario delle proprietà dell'app Xamarin.Forms alle preferenze MAUI .NET. - La proprietà
PhoneDialer.Current
è stata rimossa. Utilizzare invecePhoneDialer.Default
. OpenGLView
è stato rimosso.
Modifiche del comportamento
Il comportamento seguente è cambiato rispetto alla versione precedente:
- L'uso del Map controllo da XAML richiede ora la dichiarazione dello spazio dei nomi seguente
xmlns
:xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - La memorizzazione nella cache delle immagini è disabilitata in Android durante il caricamento di un'immagine da un flusso con il
ImageSource.FromStream
metodo . Ciò è dovuto alla mancanza di dati da cui creare una chiave di cache ragionevole. - In iOS le pagine scorrono automaticamente quando la tastiera di input soft copriva un campo di immissione di testo, in modo che il campo si trova sopra la tastiera di input soft. Il
KeyboardAutoManagerScroll.Disconnect
metodo, nello spazio deiMicrosoft.Maui.Platform
nomi , può essere chiamato per disabilitare questo comportamento predefinito. IlKeyboardAutoManagerScroll.Connect
metodo può essere chiamato per riabilitare il comportamento dopo che è stato disabilitato. - Il modo in cui il colore di una scheda è impostato in un'app Shell è cambiato in alcune piattaforme. Per altre informazioni, vedere Aspetto delle schede.
- Non è necessario specificare un valore per la
$(ApplicationIdGuid)
proprietà di compilazione nel file di progetto dell'app. Ciò avviene perché le app di Windows .NET MAUI non richiedono più un GUID come ID app e usano invece il valore della proprietà di$(ApplicationId)
compilazione come ID app. Pertanto, lo stesso ID app in formato di dominio inverso viene ora usato in tutte le piattaforme, ad esempio com.mycompany.myapp. - Le app .NET MAUI Mac Catalyst non sono più limitate a 50 voci di menu sulla barra dei menu.
- Il
PlatformImage.FromStream
metodo, nello spazio deiMicrosoft.Maui.Graphics
nomi, può ora essere usato per caricare immagini in Windows anziché dover usare laW2DImageLoadingService
classe . - In Android le animazioni rispettano le impostazioni di animazione di sistema. Per altre informazioni, vedere Animazione di base.
Prestazioni
Esistono numerose modifiche alle prestazioni in .NET MAUI 8. Queste modifiche possono essere classificate in cinque aree:
- Nuove funzionalità
- Prestazioni di compilazione e ciclo interno
- Miglioramenti delle prestazioni o delle dimensioni dell'app
- Struct e
IEquatable
in .NET MAUI - Risolvere il problema di prestazioni in
{AppThemeBinding}
- Indirizzo
CA1307
eCA1309
prestazioni - Indirizzo
CA1311
per le prestazioni - Rimuovere l'evento inutilizzato
ViewAttachedToWindow
in Android - Rimuovere non richiesto
System.Reflection
per{Binding}
- Usare
StringComparer.Ordinal
perDictionary
eHashSet
- Ridurre l'interoperabilità Java in
MauiDrawable
in Android - Migliorare le prestazioni del layout di
Label
in Android - Ridurre le chiamate di interoperabilità Java per i controlli in .NET MAUI
- Migliorare le prestazioni di
Entry.MaxLength
in Android - Migliorare l'utilizzo della memoria di
CollectionView
in Windows - Usare
UnmanagedCallersOnlyAttribute
nelle piattaforme Apple - Interoperabilità Java più veloce per le stringhe in Android
- Interoperabilità Java più veloce per eventi C# in Android
- Usare puntatori a funzione per JNI
- Lontano
Xamarin.AndroidX.Legacy.Support.V4
- Deduplicazione di generics in iOS e macOS
- Correzione
System.Linq.Expressions
dell'implementazione in piattaforme simili a iOS - Impostare
DynamicCodeSupport=false
per iOS e Catalyst
- Struct e
- Perdite di memoria
- Strumenti e documentazione
Per altre informazioni, vedere Miglioramenti delle prestazioni di .NET 8 in .NET MAUI.
Eseguire l'aggiornamento da .NET 7 a .NET 8
Per aggiornare i progetti da .NET 7 a .NET 8, installare .NET 8 e il carico di lavoro MAUI .NET con Visual Studio 17.8+o con il programma di installazione autonomo e il dotnet workload install maui
comando.
Aprire quindi il file con estensione csproj e modificare i moniker del framework di destinazione (TFM) da 7 a 8. Se si usa un TFM, net7.0-ios13.6
ad esempio assicurarsi di corrispondere alla versione della piattaforma o rimuoverla completamente. L'esempio seguente illustra i TFM per un progetto .NET 7:
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
L'esempio seguente illustra i TFM per un progetto .NET 8:
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
I riferimenti espliciti ai pacchetti devono essere aggiunti anche al file con estensione csproj per i pacchetti NuGet .NET MAUI seguenti:
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
Viene $(MauiVersion)
fatto riferimento alla variabile dalla versione di .NET MAUI installata. È possibile eseguire l'override di questa operazione aggiungendo la $(MauiVersion)
proprietà di compilazione al file con estensione csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
Ciò può essere utile quando si usano build ad hoc dal feed notturno o le compilazioni scaricate dalle richieste pull.
Inoltre, la $(ApplicationIdGuid)
proprietà di compilazione può essere rimossa dal file con estensione csproj in .NET 8. Per altre informazioni, vedere Modifiche al comportamento.
Prima di compilare l'app aggiornata per la prima volta, eliminare le bin
cartelle e obj
.
Nota
Il modello di progetto per un'app MAUI .NET in .NET 8 abilita il contesto nullable per il progetto con la proprietà di $(Nullable)
compilazione. Per altre informazioni, vedere Nullable.