Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Bibliothèque de code portable, Async et le reste…

[new:20/03/2013]Les bibliothèques de code portable (Portable Libraries) de Visual Studio 2012 sont une avancée très importante dans notre monde qui hésite entre plusieurs plateformes, même au sein de la gamme Microsoft. Toutefois cibler plusieurs OS peut demander de faire des coupes sombres, comment y remédier ?

Code portable et Async

Les Portable Librairies permettent d’écrire un code unique qui peut ensuite être utilisé dans des projets ciblant des versions d’OS différents. Cela fonctionne au sein de la gamme Microsoft (par exemple écrire un code commun pour des projets WinRT et Windows Phone), mais cela fonctionne même au-delà du monde Microsoft : c’est le principe utilisé par MvvmCross pour développer un seul code tournant sous Android et Windows Phone par exemple.

C# 5 propose un nouveau mécanisme de gestion de l’asynchronisme via les modificateurs await/async. Je reviendrais plus en détail sur ce mécanisme car il est loin d’être aussi simple qu’il y parait et peut être générateur de nombreux bogues très difficiles à comprendre. Mais là n’est pas le sujet du jour.

C# 5, donc, propose await/async. Malgré les réserves indiquées ci-dessus il s’agit d’un procédé très puissant simplifiant grandement l’écriture du code. Difficile de s’en passer une fois qu’on a découvert son efficacité.

Si vous voulez cibler dans une bibliothèque de code portable à la fois Windows Phone 8 et WinRT, il n’y a aucun problème, await/async sont disponibles dans les deux personnalités de .NET puisqu’elles sont au niveau 4.5 l’une et l’autre.

Maintenant si vous désirez cibler WinRT et Windows Phone 7.1 c’en est fini de await/async car WP7 n’est pas en 4.5… Et code une bibliothèque de code portable s’aligne sur le plus petit dénominateur commun…

Toutefois il existe une pré-release de Async pour le framework 4 qui fonctionnait aussi avec SL4, SL5, Windows Phone 7.x et 8. De fait il est possible d’utiliser Async dans une librairie de code portable à condition d’installer cette extension (c’est un paquet Nuget).

Possible, mais en framework 4

Si vous souhaitez créer une Portable Library incluant des environnements ne supportant pas Async comme WP7 ou SL4, cela est donc possible à l’aide du paquet Nuget présenté plus haut, mais à une seule condition : cibler le framework 4 et non 4.5.

Création d’une PL avec Async

Une fois cet impératif pris en compte, il suffit de créer une nouvelle PL en choisissant les environnements supportés :

Targets for Portable Class Library project

Pour ajouter le support à Async il faut bien entendu installer le paquet Nuget. On peut le faire directement par VS 2012 ou bien par la console :

Install-Package Microsoft.Bcl.Async –Pre

Conclusion

On aime bien pouvoir utiliser toutes les nouveautés à la fois… les Portable librairies et Async par exemple. Même si cela n’est pas toujours évident il existe souvent des astuces permettant d’obtenir ce qu’on désire, la preuve…

Alors ne vous privez ni des PCL ni de Async et développez des applications portables avec le moindre effort !

Stay Tuned !

blog comments powered by Disqus