Compatibilité des applications dans le .NET Framework
La compatibilité est un objectif important de chaque version du .NET Framework. La compatibilité garantit que chaque version est additive et que les versions précédentes continueront de fonctionner. En revanche, les modifications apportées aux fonctionnalités précédentes (par exemple, pour améliorer les performances, résoudre des problèmes de sécurité ou corriger des bogues) peuvent provoquer des problèmes de compatibilité dans le code ou des applications qui s’exécutent sous une version ultérieure.
Chaque application cible une version spécifique de .NET Framework par :
- La définition d’une version cible de .NET Framework dans Visual Studio.
- La spécification de la version cible de .NET Framework dans un fichier projet.
- L’application d’un TargetFrameworkAttribute au code source.
Lors de la migration d’une version .NET Framework vers une autre, il existe deux types de modifications à prendre en compte :
Modifications du runtime
Les problèmes de runtime sont ceux qui surviennent lorsqu'un nouveau runtime est placé sur une machine et que le comportement d'une application change. Lors de l’exécution sur une version plus récente que celle qui était ciblée, .NET Framework utilise un subterfuge afin de simuler l’ancienne version ciblée. L’application s’exécute sur la version la plus récente, mais agit comme si elle s’exécute sur l’ancienne version. La plupart des problèmes de compatibilité entre les versions .NET Framework sont atténués via ce modèle de subterfuge. Par exemple, si un fichier binaire a été compilé pour .NET Framework 4.0 mais s’exécute sur un ordinateur avec .NET Framework 4.5 ou version ultérieure, il s’exécute en mode de compatibilité .NET Framework 4.0. Cela signifie que la plupart des modifications apportées à la version ultérieure n’affectent pas le fichier binaire.
La version .NET Framework que cible une application est déterminée par la version cible de l’assembly d’entrée pour le domaine d’application dans lequel le code s’exécute. Tous les autres assemblys chargés dans ce domaine d’application ciblent cette version. Par exemple, dans le cas d'un exécutable, la version que l'exécutable cible est le mode de compatibilité sous lequel tous les assemblys de ce domaine d'application s’exécutent.
Modifications de reciblage
Les modifications de reciblage sont celles qui surviennent lorsqu’un assembly est recompilé pour cibler une version plus récente. Cibler une nouvelle version signifie que l’assembly accepte les nouvelles fonctionnalités ainsi que les éventuels problèmes de compatibilité des anciennes fonctionnalités.
Classification de l’impact
Dans les articles qui décrivent les modifications de runtime et de reciblage, par exemple Modifications de reciblage pour la migration vers .NET Framework 4.8.x, les éléments individuels sont classés par leur impact attendu comme suit :
Majeur
Modification importante qui affecte un grand nombre d'applications ou qui nécessite de modifier significativement le code.
Secondaire
Modification qui affecte un petit nombre d’applications ou qui nécessite peu de modifications du code.
Cas limite
Modification qui affecte des applications dans des scénarios très spécifiques qui ne sont pas courants.
Mode transparent
Modification qui n'a pas d'effet visible pour le développeur ou l'utilisateur de l'application. L'application n'a pas besoin d'être modifiée en raison de cette modification.