Silverlight 4 et la rétrocompatibilité (compatibilité ascendante) avec Silverlight 3
Edit: Clarification de la fonctionnalité quirks mode, qui assure une compatibilité ascendante
Silverlight 4 Beta est disponible publiquement depuis plus d’une semaine, et le client avec qui je travaille actuellement a décidé de cibler cette version afin de profiter des nombreuses nouvelles fonctionnalités offertes. Une question légitime qu’il s’est posé lors du passage vers Silverlight 4/Visual Studio 2010 est celle de la rétrocompatibilité: comment Silverlight 4 gère-t-il les applications ciblant une version précédente du runtime? Voici un bref résumé sur le sujet :
- Silverlight 4 n'est pas uniquement un ajout de nouvelles classes comme l’a été .NET 3.0 par rapport à .NET 2.0. Il s’agit d’une évolution: le runtime du 4 remplace celui du 3
- Silverlight implemente le quirks mode pour assurer que la bonne exécution des applications existantes. Lorsque le manifest d’un XAP précise une version antérieure de SL3 dans son manifest, SL4 passe en mode quirks. Ce mode implémente des mécanismes permettant de s’exécuter à la manière des versions antérieures du runtime (il traite également de la rétrocompatibilité vers les runtimes 1 et 2).
Lors de la mise à jour d’une application vers Silverlight 4, vérifiez les assemblies (DLL) binaires SL3 présente dans le nouveau XAP en effet, l’application ayant pour cible la version 4, elle s’exécutera hors du mode quirks. Il faut en général éviter de mélanger des binaires ciblant des runtimes différents.- AppManifest.xaml (ciblant SL4)
- Main.dll
- SL4Assembly.dll
- SL3Assembly.dll <- ne s’exécutera pas en mode quirks !
- Lorsque l’on utilise Prism, puisque toutes les assemblies se chargent dans le même AppDomain, celles-ci s’exécuteront toutes dans le mode défini par le manifest du XAP principal
Pour voir le manifest d’une application (XAP), il vous suffit d’explorer le fichier XAP comme s’il s’agissait d’un fichier ZIP.
Note: Cool! Mon previous précédent a été cité sur This Week On Channel 9 (15:00) !