Fermer

janvier 7, 2026

Explorer les méthodes de marshal dans .NET MAUI

Explorer les méthodes de marshal dans .NET MAUI


Les méthodes de marshal sont essentielles pour interagir avec les fonctionnalités natives de .NET MAUI. Voici les nouveautés pour eux dans .NET 10, notamment pour Android.

Imaginez ceci : vous arrivez enfin dans le pays de vos rêves, mais la plupart des gens y parlent une langue que vous ne comprenez pas. Peut-être que dans les centres commerciaux, vous trouverez quelqu’un qui parle votre langue et vous aidera à vivre une expérience fluide… mais vous voulez quand même interagir avec tout le monde, car ils sont essentiels pour profiter pleinement de l’aventure que vous avez imaginée.

Alors, que fais-tu ? Partir? Certainement pas! 😌

Vous avez simplement besoin d’un traducteur : quelqu’un qui comprend votre langue, la convertit dans la langue locale, interagit en votre nom et vous renvoie ensuite la réponse. Problème résolu !

Eh bien… c’est exactement ce que méthodes de maréchal faire. ✨ Ils agissent comme traducteurs entre .NET et les intégrations natives du système d’exploitation. Dans cet article, nous explorerons ce qu’ils sont, pourquoi ils sont importants et les nouveautés de .NET 10 pour .NET MAUI.

Que sont exactement les méthodes Marshal ? 👀

Les méthodes Marshal sont des fonctionnalités spéciales de .NET qui agissent comme un pont, permettant à deux mondes différents de communiquer : le modèle de programmation géré et celui non géré.

En termes plus simples, ils permettent l’échange de données entre le code exécuté dans .NET (C#, géré) et le code natif du système d’exploitation (C/C++, API système, bibliothèques natives tierces).

Vous pouvez les considérer comme un traducteur cela permet d’intégrer et d’utiliser des fonctionnalités natives dans notre application : envoyer des informations et recevoir des résultats. En pratique, sans eux, nous ne pourrions pas interagir avec de nombreuses fonctionnalités intégrées fournies par chaque système d’exploitation.

Code géré et code non géré : quelle est la différence ? 🤔

Code géré

Imaginez que vous créez une application en utilisant C# dans .NET MAUI : l’environnement géré vous permet de travailler plus confortablement car .NET gère de nombreuses tâches internes pour vous. Vous n’avez pas besoin de libérer manuellement de la mémoire ni de vous soucier des erreurs dangereuses liées à la mémoire.

En bref, ce type de code fournit :

  • Collecte des déchets : Nettoie automatiquement la mémoire qui n’est plus utilisée.
  • Type de sécurité : .NET vérifie que les variables et les objets sont utilisés correctement, contribuant ainsi à éviter les erreurs critiques.
  • Gestion automatique de la mémoire : Le runtime peut réorganiser, déplacer et optimiser les objets dans le tas sans nécessiter d’intervention manuelle.

Tout cela se déroule à l’intérieur du Exécution .NETce qui signifie qu’il fonctionne dans un environnement sécurisé distinct du système d’exploitation. Cela améliore la sécurité, la stabilité et la portabilité entre les plates-formes.

Code non géré

De l’autre côté du code managé, nous avons le code non managé. Il s’agit d’un code qui ne s’exécute pas sous le contrôle du runtime .NET. Au lieu de cela, il appartient directement au système d’exploitation.

Cela inclut les fonctionnalités natives de l’appareil telles que le microphone, la localisation/GPS et autres. Et contrairement à ce que nous obtenons avec le code managé (comme le garbage collection, la sécurité des types et la gestion automatique de la mémoire), aucune de ces protections ne s’applique ici.

Parlons plus spécifiquement des méthodes Marshal dans .NET MAUI

Lorsque nous construisons une application avec .NET MAUI, tout le code que nous écrivons en C# s’exécute comme code managé. Cependant, tôt ou tard, nous devrons accéder aux fonctionnalités de l’appareil telles que l’appareil photo, les capteurs, le Bluetooth, etc.

Et tout cela n’appartient pas au monde .NET. Ces capacités sont fournies par le système d’exploitation lui-même, implémentées à l’aide de technologies natives, ce qui signifie qu’elles sont considérées comme code non géré.

C’est là méthodes de maréchal entrer en jeu. Ils prennent ce que nous demandons en C#, le traduisent dans la langue native correspondante, attendent la réponse et le ramènent afin que nous puissions continuer à le gérer comme un objet C# normal, de manière totalement transparente pour nous.

Prenons un exemple simple : accéder à la caméra. Même si l’intention est exactement la même…« Je veux prendre une photo »-chaque plateforme implémente cette fonctionnalité différemment :

Plateforme : Android , Technologie Native : Java/Kotlin + appels natifs (JNI/NDK - Plateforme : iOS/macOS, Technologie Native : Objective-C / Swift + frameworks natifs - Plateforme : Windows, Technologie Native : API Win32 en C/C++

Pendant ce temps, dans votre code .NET, vous pouvez simplement écrire :

var photo = await MediaPicker.CapturePhotoAsync();

Et « sous le capot », .NET MAUI se charge de détecter la plateforme, d’appeler la bonne API native, de convertir la réponse et de vous la restituer sous forme d’objet C#.

Quoi de neuf dans .NET 10 à propos des méthodes de marshal pour .NET MAUI ? 🤔

Méthodes de marshal activées par défaut

Dans .NET 9, un nouveau mécanisme de génération de méthodes de marshal a été introduit, améliorant ainsi les performances de démarrage des applications Android. Cependant, cette fonctionnalité était non activé par défautet les développeurs ont dû l’activer manuellement.

En commençant par .NET10ces méthodes de marshal optimisées sont activé par défautce qui entraîne un démarrage plus rapide de l’application.

Mais dans certains cas, ce changement peut entraîner le blocage de l’application ou un lancement trop long lorsqu’elle est exécutée sur Android. Si vous remarquez ce comportement dans les aperçus de .NET 10 (et cela ne s’est pas produit sur .NET 9), vous pouvez désactiver temporairement cette fonctionnalité en ajoutant la propriété MSBuild suivante au fichier .NET de votre projet.cspros déposer:

<PropertyGroup>  	
  <AndroidEnableMarshalMethods>false</AndroidEnableMarshalMethods> 
<PropertyGroup>

📦 Métadonnées ArtifactFilename pour l’élément @(AndroidMavenLibrary)

Depuis .NET 9, il existe un élément MSBuild appelé @(AndroidMavenLibrary) qui permet à .NET de télécharger automatiquement une bibliothèque Java/Android depuis Maven et de l’inclure dans votre projet Android.

La convention de dénomination attendue pour le fichier dans Maven suit généralement quelque chose comme :
{artifact.Id}-{artifact.Version}.[jar|aar].

Cependant, de nombreuses bibliothèques ne suivez pas un format de dénomination standard. Certains ajoutent des noms personnalisés, des suffixes supplémentaires, des balises de construction alternatives, etc.

Par exemple:

✅ Ce à quoi .NET s'attendrait : react-android-0.76.0.aar - ❌ Ce qui existe réellement dans Maven : react-android-0.76.0-release.aar

En conséquence, le téléchargement pourrait échouer. 😬

Avec .NET10ce n’est plus un problème. Vous pouvez maintenant spécifier manuellement le nom de fichier exact de la bibliothèque. Cela permet à .NET de savoir précisément quel fichier rechercher et évite les échecs inattendus lors de la liaison des dépendances Maven.

Vous pouvez le faire en ajoutant le Nom de fichier artefact métadonnées au @(AndroidMavenLibrary) Élément MSBuild, permettant de fournir un nom de fichier alternatif.

Par exemple:

<ItemGroup> 
    <AndroidMavenLibrary 
	    Include="com.facebook.react:react-android" 
	    Version="0.76.0" 
    ArtifactFilename="react-android-0.76.0-release.aar" /> 
</ItemGroup>

Si vous n’êtes pas familier avec Maven…

Maven est un outil de gestion et de création de dépendances, ce qui signifie qu’il permet aux projets de télécharger automatiquement des bibliothèques à partir de référentiels en ligne. Il est principalement utilisé dans les écosystèmes Java et Android.

Conclusion

Et c’est tout! 🎉 Vous savez maintenant ce que sont les méthodes de marshal, pourquoi elles sont essentielles pour interagir avec les fonctionnalités natives de .NET MAUI et les nouveautés de .NET 10 pour elles, en particulier pour les performances d’Android. 🚀

J’espère que ce guide vous aidera à mieux comprendre ce qui se passe « dans les coulisses » et vous donnera plus de confiance lorsque vous travaillez avec les fonctionnalités natives des appareils dans vos applications MAUI.

Si vous avez des questions ou souhaitez que j’aborde des sujets plus connexes, n’hésitez pas à laisser un commentaire, je serai ravi de vous aider ! 💚

Rendez-vous dans le prochain article ! 🙋‍♀️✨

Références

L’explication était basée sur la documentation officielle :




Source link