Nouveautés de .NET MAUI pour .NET 8
Dans .NET 8, .NET MAUI s’est concentré sur la qualité. Dans .NET 8, 1 618 demandes de tirage (pull request) ont été fusionnées pour mettre fin à 689 problèmes. Cela comprend notamment des modifications de l’équipe .NET MAUI ainsi que de la communauté .NET MAUI. Ces modifications devraient entraîner une augmentation significative de la qualité de .NET 8.
Important
En raison de l’utilisation de dépendances externes sous-jacentes, telles que Xcode ou Android SDK Tools, la stratégie de prise en charge de l’interface utilisateur d’application multiplateforme .NET (.NET MAUI) est différente de la stratégie de prise en charge .NET et .NET Core. Pour plus d’informations, consultez Stratégie de prise en charge de .NET.
Dans .NET 8, .NET MAUI est fourni sous la forme d’une charge de travail .NET et de plusieurs packages NuGet. L’avantage de cette approche est qu’elle vous permet d’épingler facilement vos projets à des versions spécifiques, tout en vous permettant d’avoir facilement un aperçu des builds non publiées ou expérimentales. Quand vous créez un projet .NET MAUI, les packages NuGet nécessaires sont automatiquement ajoutés au projet.
Cet article répertorie les nouvelles fonctionnalités de .NET MAUI pour .NET 8 et fournit des liens vers des informations plus détaillées de chacun.
Pour plus d’informations sur les nouveautés de .NET 8, consultez Nouveautés de .NET 8.
Nouvelle fonctionnalité
Bien que cette version de .NET MAUI se concentre sur la qualité, elle propose aussi de nouvelles fonctionnalités permettant de nouveaux scénarios dans vos applications.
Contrôles
- Des contrôles qui prennent en charge les entrées de textes bénéficient de méthodes d’extension qui prennent en charge le masquage et l’affichage du clavier d’entrée réversible. Pour plus d’informations, consultez Masquer et afficher le clavier d’entrée réversible.
- La classe ContentPage bénéficie désormais d’une propriété HideSoftInputOnTapped, ce qui indique si appuyer n’importe où sur la page entraîne la mise en cache du clavier d’entrée réversible s’il est visible. Pour plus d’informations, consultez ContentPage.
- BlazorWebView bénéficie d’une propriété StartPath, d’une méthode TryDispatchAsync et de fonctionnalités de journalisation améliorées. Pour plus d’informations, consultez Héberger une application web Blazor dans une application .NET MAUI à l’aide de BlazorWebView.
- WebView bénéficie d’une propriété UserAgent. Pour plus d’informations, consultez WebView.
- La lecture multimédia inline de la vidéo HTML5, y compris la lecture automatique et l’image dans l’image, a été activée par défaut pour WebView sur iOS. Pour plus d’informations, consultez Définir les préférences de lecture multimédia sur iOS et Mac Catalyst.
- La surcharge
Grid.Add
qui accepte 5 arguments a été ajoutée à .NET MAUI. Toutefois, cette méthode est déconseillée et est uniquement présente pour faciliter les migrations à partir de Xamarin.Forms. - Grid bénéficie d’une méthode d’extension AddWithSpan qui ajoute un affichage de Grid à la ligne et la colonne spécifiées avec les étendues de ligne et de colonne spécifiées.
Bureau
- Les éléments de barre de menus et les éléments de menu contextuel peuvent être appelés par le biais de raccourcis clavier aussi appelés accélérateurs clavier. Pour plus d’informations, consultez Accélérateurs clavier.
- Les applications Windows peuvent être publiées en tant qu’applications non empaquetées. Pour plus d’informations, consultez Publier une application .NET MAUI non empaquetée pour Windows à l’aide de l’interface CLI.
Modules de reconnaissance des mouvements
- PointerGestureRecognizer bénéficie des propriétés PointerPressedCommand, PointerPressedCommandParameter, PointerReleasedCommand, PointerReleasedCommandParameter et des événements PointerPressed et PointerReleased. Pour plus d’informations, consultez Reconnaître un mouvement de pointeur.
- L’objet PointerEventArgs qui accompagne les événements de pointeur déclenchés par la classe PointerGestureRecognizer bénéficie d’une propriété PlatformArgs de type PlatformPointerEventArgs. Cette propriété fournit l’accès aux arguments spécifiques à la plateforme pour un événement de mouvement de pointeur. Pour plus d’informations, consultez Reconnaître un mouvement de pointeur.
- Les objets DragStartingEventArgs, DragEventArgs et DropEventArgs et les objets DropCompletedEventArgs qui accompagnent les événements de mouvement de glisser-déplacer bénéficient chacun d’une propriété
PlatformArgs
. Cette propriété fournit l’accéder aux arguments spécifiques à la plateforme pour un événement de glisser-déplacer. Pour plus d’informations, consultez Reconnaître un mouvement de glisser-déplacer. - La position à laquelle un mouvement de glisser-déplacer s’est produit peut être obtenue en appelant la méthode GetPosition sur un objet DragEventArgs, DragStartingEventArgs, ou un objet DropEventArgs. Pour plus d’informations, consultez Reconnaître un mouvement de glisser-déplacer.
- La classe TapGestureRecognizer bénéficie de la capacité de gérer les appuis secondaires sur Android. Pour plus d’informations, consultez Reconnaître un mouvement d’appui.
Navigation
- La navigation Shell bénéficie d’une surcharge GoToAsync qui vous permet de passer des données de navigation à usage unique, qui sont effacées une fois la navigation effectuée, en tant qu’objet ShellNavigationQueryParameters. Pour plus d’informations, consultez Transmettre des données de navigation basées sur un objet à usage unique.
Intégration de la plateforme
- La classe Geolocation peut écouter les modifications d’emplacement lorsque des applications sont au premier plan. Pour plus d’informations, consultez Écouter les modifications d’emplacement.
- Flashlight obtient une méthode IsSupportedAsync qui détermine si une lampe de poche est disponible sur l’appareil. Pour plus d’informations, consultez Lampe de poche.
- Les intervalles SensorSpeed ont été unifiés sur toutes les plateformes. Pour plus d’informations, consultez Accès aux capteurs d’appareils.
- La classe Permissions obtient l’autorisation Permissions.Bluetooth, qui est une autorisation Android 12 pour rechercher des appareils Bluetooth, rendant l’appareil actuel détectable à d’autres appareils Bluetooth et communiquer avec des appareils Bluetooth déjà jumelés. Pour plus d’informations, consultez Autorisations.
- La classe Permissions obtient l’autorisation Permissions.NearbyWifiDevices, qui est une autorisation Android 13 pour accéder aux appareils WiFi proches. Pour plus d’informations, consultez Autorisations.
XAML
- L’attribut
x:ClassModifier
peut être spécifié sur les classes XAML pour contrôler le niveau d’accès d’une classe générée dans un assembly. Pour plus d'informations, consultez Modificateurs de classe. - Les ressources définies dans un objet ResourceDictionary peuvent également être consommées dans un
AppThemeBinding
avec l’extension de balisageDynamicResource
. Pour plus d’informations, consultez Définir et consommer des ressources de thème. - Color est le
ContentProperty
de la classe SolidColorBrush, et n’a donc pas besoin d’être explicitement défini à partir de XAML.
Dépannage
- À des fins de résolution des problèmes, la génération de ressources peut être désactivée. Pour plus d’informations, consultez Désactiver l’empaquetage d’images, Désactiver l’empaquetage d’écran de démarrage, Désactiver l’empaquetage de polices et Désactiver l’empaquetage de fichiers d’éléments multimédias.
- Pour résoudre des problèmes, un écran de démarrage vide peut être généré. Pour plus d’informations, consultez Générer un écran de démarrage vide.
- Vérifications de redimensionnements pour les noms de fichiers d’image en double. Pour plus d’informations, consultez Erreurs de nom de fichier d’image en double.
Divers
- La gestion des fenêtres peut être découplée de la classe
App
. Pour plus d’informations, consultez Dissocier la gestion des fenêtres de la classe d’application. - Plusieurs polices système peuvent être facilement consommées dans les applications Android. Pour plus d’informations, consultez Consommer des polices.
- Sur iOS,
MauiUIApplicationDelegate
bénéficie d’une méthodePerformFetch
qui peut être remplacée ou consommée via le déléguéiOSLifecycle.PerformFetch
. Pour plus d’informations, consultez Événements de cycle de vie de la plateforme iOS et Mac Catalyst.
Dépréciation et suppression de type
Les types ou membres suivants ont été dépréciés :
- ClickGestureRecognizer a été déprécié.
- Les propriétés jointes
AutomationProperties.Name
,AutomationProperties.HelpText
etAutomationProperties.LabeledBy
ont été déconseillées. - FocusChangeRequested a été déconseillé. Utilisez plutôt la méthode Focus() pour tenter de définir le focus sur l’affichage.
Les types ou membres suivants ont été supprimés :
- La propriété
Application.Properties
et la méthodeApplication.SavePropertiesAsync
ont été supprimées. Pour migrer vos données de propriétés d’application vers .NET MAUI, consultez Migrer les données du dictionnaire de propriétés de l’application Xamarin.Forms vers les préférences MAUI .NET. - La propriété
PhoneDialer.Current
a été supprimée. UtilisezPhoneDialer.Default
à la place. OpenGLView
a été supprimé.
Changements de comportement
Le comportement suivant a changé depuis la version précédente :
- Utiliser le contrôle Map à partir de XAML nécessite désormais la déclaration d’espace de noms
xmlns
suivante :xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
. - La mise en cache d’images est désactivée sur Android lors du chargement d’une image à partir d’un flux avec la méthode
ImageSource.FromStream
. Cela est dû au manque de données à l’origine de la création d’une clé de cache raisonnable. - Sur iOS, les pages défilent automatiquement lorsque le clavier d’entrée réversible couvre un champ d’entrée de texte, afin que le champ se trouve au-dessus du clavier d’entrée réversible. La méthode
KeyboardAutoManagerScroll.Disconnect
, dans l’espace de nomsMicrosoft.Maui.Platform
, peut être appelée pour désactiver ce comportement par défaut. La méthodeKeyboardAutoManagerScroll.Connect
peut être appelée pour réactiver le comportement après sa désactivation. - La façon de définir la couleur d’un onglet dans une application Shell a changé sur certaines plateformes. Pour plus d’informations, consultez Apparence d’onglet.
- Il n’est pas nécessaire de spécifier une valeur pour la propriété de build
$(ApplicationIdGuid)
dans le fichier projet de votre application. Cela provient du fait que les applications Windows .NET MAUI ne nécessitent plus de GUID en tant qu’ID d’application et utilisent plutôt la valeur de la propriété de build$(ApplicationId)
comme ID d’application. Par conséquent, le même ID d’application au format de domaine inverse est désormais utilisé sur toutes les plateformes, telles que com.mycompany.myapp. - Les applications Mac Catalyst .NET MAUI ne sont plus limitées à 50 éléments de menu dans la barre de menus.
- La méthode
PlatformImage.FromStream
, dans l’espace de nomsMicrosoft.Maui.Graphics
, peut désormais être utilisée pour charger des images sur Windows au lieu d’avoir à utiliser la classeW2DImageLoadingService
. - Sur Android, les animations respectent les paramètres d’animation système. Pour plus d’informations, consultez Animation de base.
Performances
.NET MAUI 8 présente de nombreux changements. Ces modifications peuvent être classées dans cinq domaines :
- Nouvelles caractéristiques
- Performances des boucles internes et des builds
- Améliorations des performances ou de la taille des applications
- Structs et
IEquatable
dans .NET MAUI - Résolution des problèmes de performances dans
{AppThemeBinding}
- Amélioration de
CA1307
etCA1309
pour de meilleures performances - Amélioration de
CA1311
pour de meilleures performances - Suppression d’un événement
ViewAttachedToWindow
inutilisé sur Android - Suppression d’un
System.Reflection
inutile pour{Binding}
- Utilisation de
StringComparer.Ordinal
pourDictionary
etHashSet
- Réduction de l’interopérabilité Java dans
MauiDrawable
sur Android - Amélioration des performances de disposition de
Label
sur Android - Réduction des appels d’interopérabilité Java pour les contrôles dans .NET MAUI
- Amélioration des performances de
Entry.MaxLength
sur Android - Amélioration de l’utilisation de la mémoire de
CollectionView
sur Windows - Utilisation de
UnmanagedCallersOnlyAttribute
sur les plateformes Apple - Accélération de l’interopérabilité Java pour les chaînes sur Android
- Accélération de l’interopérabilité Java pour les événements C# sur Android
- Utilisation de pointeurs de fonction pour JNI
- Suppression de
Xamarin.AndroidX.Legacy.Support.V4
- Déduplication des génériques sur iOS et macOS
- Correction de l’implémentation de
System.Linq.Expressions
sur les plateformes similaires à iOS - Configuration de
DynamicCodeSupport=false
pour iOS et Catalyst
- Structs et
- Fuites de mémoire
- Outils et documentation
Pour plus d'informations, consultez Améliorations des performances de .NET 8 dans .NET MAUI.
Mise à niveau de .NET 7 vers .NET 8
Pour mettre à niveau vos projets de .NET 7 vers .NET 8, installez .NET 8 et la charge de travail .NET MAUI avec Visual Studio 17.8+, ou avec le programme d’installation autonome et la commande dotnet workload install maui
.
Ensuite, ouvrez votre fichier .csproj et modifiez les monikers du framework cible (TFM) 7 en 8. Si vous utilisez un TFM, par exemple net7.0-ios13.6
, veillez à correspondre à la version de la plateforme ou supprimez-le entièrement. L’exemple suivant montre les TFM pour un projet .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’exemple suivant montre les TFM pour un projet .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>
Les références de package explicites doivent également être ajoutées à votre fichier .csproj pour les packages NuGet .NET MAUI suivants :
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
La variable $(MauiVersion)
est référencée à partir de la version de .NET MAUI que vous avez installée. Vous pouvez remplacer cela en ajoutant la propriété de build $(MauiVersion)
à votre fichier .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>
Cela peut être utile lors de l’utilisation de builds ad hoc à partir du flux nocturne ou de builds téléchargées à partir de demandes de tirage.
En outre, la propriété de build $(ApplicationIdGuid)
peut être supprimée de votre fichier .csproj dans .NET 8. Pour plus d’informations, consultez Modifications de comportement.
Avant de créer votre application mise à niveau pour la première fois, supprimez les dossiers bin
et obj
.
Remarque
Le modèle de projet pour une application .NET MAUI dans .NET 8 active le contexte nullable pour le projet avec la propriété de build $(Nullable)
. Pour plus d’informations, consultez Nullable.