Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Porter des bibliothèques Xamarin.Forms vers MAUI

Transférer vers une bibliothèque .NET MAUI une bibliothèque Xamarin.Forms peut soulever des questions auxquels je vais tenter de réponse. Mais vous trouverez cela utile si vous devez mettre à niveau n'importe quel code vers .NET 6, 7 et +.

Votre base de code

Vous disposez d'une bibliothèque SDK pour Xamarin.Forms ciblant .NET Standard, Xamarin.iOS et Mono, car vous partagez du code entre les plates-formes. Une partie de votre code peut être prête à être utilisée, d'autres non. Vous passerez par un processus impliquant le tri des projets et la détermination de ce qu'il faut mettre à niveau, abandonner ou réécrire. Cette étape de questionnement est cruciale et fait partie de toute migration, sujet déjà abordé dans mes précédents articles et d’autres à venir.

Refactoriser ou réécrire ou bifurquer ?

Une fois que vous avez fixé la cible du framework, vous devrez examiner chacun de vos projets un par un et voir si vous rencontrez des problèmes de compatibilité. Vous constaterez peut-être que vous n'avez tout simplement rien à faire car la compatibilité XF/MAUI est assez forte. Mais dans certains cas vous devrez peut-être mettre à jour du code, l’adapter, voire le réécrire. Ne serait-ce que pour tirer parti de nouvelles facilités et ne pas « traîner » un vieux code inadapté.

La refactorisation implique la mise à jour du code existant pour qu'il fonctionne dans le nouvel environnement sous .NET 6+. La décision de refactorer plutôt que de bifurquer peut d’ailleurs être prise soit code par code, soit selon certains périmètres fonctionnels ou techniques de l’application. Il n’existe jamais qu’un seul chemin lors d’une migration. C’est une somme de décisions et non un dogme appliqué aveuglément.

La bifurcation signifie prendre l'ancien code, le copier et le coller dans un nouveau projet .NET 6 et l'y exécuter. Si vous venez de .NET Standard, vous n'avez probablement pas besoin de le faire, mais vous devrez peut-être mettre à jour certains espaces de noms.

Conseils de migration de code Xamarin.Forms vers MAUI

Le processus de portage de votre bibliothèque de Xamarin.Forms vers .NET MAUI peut être simple ou difficile selon la bibliothèque et les dépendances dont vous disposez. Plus une application est grande, plus elle utilise des dépendances externes plus les problèmes seront nombreux. C’est une règle partagée par toutes les migrations depuis que l’informatique existe.

Toutefois voici quelques conseils pour tenter de s’en sortir au mieux.

Comprendre vos dépendances

Si votre bibliothèque a des dépendances sur d'autres bibliothèques ou projets, vous devrez prendre le temps de les examiner et de voir ce que vous pouvez ou ne pouvez pas migrer. Vos packages NuGet externes dont dépendent vos projets doivent également exister dans .NET 6+. S’il en manque, si certains n’ont pas été mis à jour, il faudra les réécrire ou en trouver d’autres, équivalents, mais qui réclameront certainement d’adapter votre code existant. Tout cela peut peser lourd et doit donc être évalué très en amont d’une migration de code.

Mettez à niveau le SDK du projet Visual Studio (.csproj)

Le nouveau format ( Style SDK ) nécessite une configuration explicite minimale et vous permet de compiler le code ( cible ) pour .NET Framework et .NET 6+ ou .NET Standard.

(Avant de construire votre bibliothèque vous devez référencer Microsoft.NET.Sdk si vous voulez que cela fonctionne.)

Multi-cible sur .NET 6

Tout d'abord, vous devriez lire cette  documentation  de Microsoft qui donne de précieux conseils !

Lorsque vos projets utilisent le format de projet SDK Style, vous pouvez tenter de compiler vers .NET 6+ ou .NET Standard. Consultez cette  documentation  sur le multi-ciblage. Dans notre cas, vous devrez peut-être cibler .NET 6+. Si vous ciblez des plates-formes natives telles que MonoAndroid ou Xamarin.iOS , vous devez tester votre code avec les nouvelles bibliothèques de plates-formes natives .NET 6+.

Une fois que vous connaissez vos frameworks cibles, vous pouvez cibler les bibliothèques .NET 6+ dont vous avez besoin.

<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
    <TargetFrameworks>net6.0;net6.0-android;net6.0-ios</TargetFrameworks>
    ...
  </PropertyGroup>
 </Project>

 Résoudre les problèmes de code

Le ciblage de la nouvelle version de .NET 6+ peut entraîner des problèmes de compilation et de dépendance. Certaines bibliothèques .NET peuvent ne pas avoir de versions compatibles  avec .NET 6+. Vous devez résoudre tous les problèmes de code qui apparaissent.

S'il manque une bibliothèque que vous utilisez dans .NET 6+, vous devrez trouver une alternative ou écrire le code vous-même. La meilleure chose à faire est de trouver une bibliothèque prise en charge plus récente et de remplacer le code existant par du code utilisant la nouvelle bibliothèque. Sinon, vous devrez utiliser  #if  avec des chemins de code différents pour les deux cibles.

Vous pouvez en profiter pour refactoriser votre code existant et ajouter des tests unitaires, etc. Vous devriez pouvoir mettre à niveau tous vos projets sans trop modifier le code d'origine.

Ne vous mouillez pas, restez DRY !!!

Cherchez des moyens d'éviter de copier et coller du code. Votre code précédent peut ne pas être si différent sur .NET 6+, vous pouvez donc généralement trouver un moyen de réutiliser votre code.

Gardez les noms de fichiers identiques pendant tout le processus. Si vous déplacez des fichiers dans de nouveaux dossiers, etc., vous aurez beaucoup de difficulté à les fusionner. Migrer c’est aussi et surtout beaucoup de bon sens et ne pas vouloir tout faire en même temps…

Conclusion

La mise à niveau de votre base de code dans la plupart des scénarios peut être facile. Aucun effort. Si vous souhaitez mettre à jour et bénéficier de tous les avantages de .NET 6+, vous devez mettre à jour vos frameworks cibles. Et comme toute application a un temps de vie assez court, il est temps largement pour les apps Xamarin.Forms d’entrer dans un processus de rénovation et d’adaptation à MAUI.

De même, si vous souhaitez que vos bibliothèques soient consommées par la communauté .NET MAUI, vous devez mettre à jour votre bibliothèque. Et il peut s’agit juste d’autres équipes dans votre entreprise, ce n’est pas forcément une volonté mégalomaniaque de partage sur toute la planète… Mais même en restant à ce niveau « égoïste » le portage peut s’avérer nécessaire.

Vous n'êtes pas seul ! D’autres se sont posés les mêmes questions, se les posent ou se les poseront fatalement… Si vous avez besoin d'aide, demandez sur vos réseaux sociaux avec les hashtags #dotnetmaui #dotnet et la communauté pourra vous aider. Mais si vous avez besoin d’un peu plus qu’une réponse ponctuelle, si vous avez besoin d’un expert pouvant englober la « big picture » de votre business et vous conseiller sur la totalité du processus adapté à votre code, n’oubliez pas que votre serviteur propose ses services d’audit, d’assistance et même de développement !

Stay Tuned !

Faites des heureux, partagez l'article !
blog comments powered by Disqus