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 !