
Au cas par cas
J’ai une application en .NET Core 3.1, .NET 5, 6 ou 7. Que faire ?
Ces versions ne sont déjà plus supportées : il y a du retard à rattraper. Il n’est pas nécessaire de refaire les migrations intermédiaires. Vous pouvez migrer directement sur .NET 10, et prochainement .NET 11.
J’ai une application legacy en .NET Framework 4.8 / 4.8.1. C’est la même chose ?
Pas vraiment. Les applications .NET Framework suivent le cycle de vie du Windows sur lequel elles sont exécutées. Elles ne sont donc pas concernées par cette échéance.
Et pour une application .NET 8 ou 9 ?
Microsoft recommande la migration vers .NET 10 : la dernière version LTS, annoncée jusqu’en novembre 2028.
Les points de vigilance à surveiller
L’outillage. Le ciblage de .NET 10 (
net10.0) est officiellement disponible depuis la version 2026 de Visual Studio (18.0). La compatibilité des SDK des agents CI/CD doit être vérifiée.Conteneurs. .NET 10 introduit un changement de la distribution des images Microsoft par défaut. Les versions antérieures utilisaient Debian, et la nouvelle valeur est Ubuntu 24.04. Les images Debian ne sont plus fournies pour .NET 10, il faut donc tester l’application sur Ubuntu :
# .NET 8 : tag par défaut sur Debian FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build # .NET 10 : tag par défaut sur Ubuntu 24.04 FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build # ou en fixant la distribution FROM mcr.microsoft.com/dotnet/sdk:10.0-noble AS buildDépendances. Entity Framework Core 8 et 9 tomberont aussi en fin de support le 10 novembre. Il faudra donc monter en version ces paquets dans les applications les utilisant.
Changement de comportement. La montée en version contient des ruptures qui n’entraîneront pas forcément d’erreur de compilation. Par exemple, en ASP.NET Core 10, les endpoints d’API utilisant une authentification par cookie renvoient un code HTTP 401 ou 403 au lieu d’une redirection vers la page de connexion. Pour rétablir la redirection :
builder.Services.AddAuthentication() .AddCookie(options => { options.Events.OnRedirectToLogin = context => { context.Response.Redirect(context.RedirectUri); return Task.CompletedTask; }; options.Events.OnRedirectToAccessDenied = context => { context.Response.Redirect(context.RedirectUri); return Task.CompletedTask; }; });
La difficulté de la migration ne réside alors pas forcément dans le code de l’application concernée, mais dans tout l’environnement qui l’entoure.
Retour d’expérience · 5 applications migrées de .NET 6 à .NET 8
Si les équipes de développement et les équipes Ops ne se coordonnent pas, ce sont des projets qui peuvent devenir très chronophages. Dans mon cas, la phase la plus longue a été l’obtention du SDK sur les agents de build. Les mots d’ordre sont alors anticipation et communication ! Chaque entité concernée doit avoir les ressources nécessaires lors du projet.
Deux versions, une échéance
Microsoft fonctionne sur deux rythmes de supports de versions différents :
- STS
Standard Term Support, 2 ans - LTS
Long Term Support, 3 ans

.NET 8 est en LTS alors que .NET 9 est en STS. Ce qui explique que l’échéance de leur support survient le même jour. Ce modèle tend à se répéter car il devrait arriver la même chose en novembre 2028, lorsque les versions 10 et 11 verront leur support expirer.
Les risques
Techniquement, la fin de support d’une version ne veut pas dire qu’elle est vulnérable le jour même. Cela indique que les futures vulnérabilités détectées ne seront pas patchées.
Aussi, il est important de ne pas précipiter la priorisation des applications à migrer : leur criticité doit être prise en compte.
Checklist migration vers .NET 10
1. Inventorier les applications concernées
Identifier le TargetFramework de chaque application de votre parc pour déterminer la liste des projets à migrer. Cette valeur est disponible dans le fichier projet (.csproj) :
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
ou
<PropertyGroup>
<TargetFrameworks>net8.0;net10.0</TargetFrameworks>
</PropertyGroup>
Ou dans la configuration centralisée (Directory.Build.props) :
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
</Project>
2. Définir les priorités : migrer ou plan B ?
Plusieurs facteurs doivent être pris en compte : le niveau du retard de versions, l’exposition, la criticité métier, et la complexité de la migration. Les applications exposées passent en premier.
Pour les applications ne pouvant pas être migrées dans les temps, installer le dernier correctif disponible, étudier une réduction de l’exposition dans la mesure du possible.
3. Préparer l’outillage
Mettre en place un SDK .NET 10, vérifier si le global.json fixe une version de SDK et adapter les agents de build.
4. Auditer les dépendances NuGet
Lister les paquets obsolètes ou vulnérables à l’aide des commandes suivantes :
dotnet package list --outdated
dotnet package list --deprecated
dotnet package list --vulnerable --include-transitive
5. Monter en version les projets
Modifier les TargetFramework (point 1) pour les faire pointer sur net10.0, puis mettre à jour les dépendances qui le nécessitent.
6. Compiler et valider
Traiter les avertissements et erreurs de compilation, relever les ruptures des versions traversées par la migration, exécuter les tests automatisés dont le projet dispose. Vérifier les parcours métiers critiques.
7. Préparer le déploiement
Tester l’environnement d’hébergement, la présence du runtime compatible, recetter la migration.