Mise à jour incrémentielle d’ASP.NET vers ASP.NET Core

La mise à jour d’une application d’ASP.NET Framework vers ASP.NET Core n’est pas triviale pour la majorité des applications de production. Ces applications incorporent souvent de nouvelles technologies à mesure qu’elles deviennent disponibles et sont souvent composées de nombreuses décisions héritées. Cet article fournit une aide et des liens vers des outils de mise à jour des applications ASP.NET Framework vers ASP.NET Core avec le moins de modifications possible.

L’utilisation omniprésente de HttpContext dans toute une base de code constitue l’un des plus grands défis. Sans l’approche incrémentielle et les outils, une réécriture à grande échelle est nécessaire pour supprimer la dépendance HttpContext. Les adaptateurs dans dotnet/systemweb-adapters fournissent un ensemble d’assistances de runtime permettant d’accéder aux types utilisés dans l’application ASP.NET Framework d’une manière qui fonctionne dans ASP.NET Core avec des modifications minimales.

Une migration complète nécessite parfois des efforts considérables en fonction de la taille de l’application, des dépendances et des API non portables utilisées. Pour continuer à déployer une application vers la production tout en travaillant à la mise à jour, le meilleur modèle à suivre est le modèle Figuier étrangleur. Le modèle Figuier étrangleur permet un développement continu sur l’ancien système avec une approche incrémentielle du remplacement d’éléments de fonctionnalités spécifiques par de nouveaux services. Ce document explique comment appliquer le modèle Figuier étrangleur à la mise à jour d’une application ASP.NET vers ASP.NET Core.

Si vous souhaitez ignorer cet article de vue d’ensemble, puis démarrer, veuillez consulter la rubrique Démarrage.

Migration d’une application vers ASP.NET Core

Avant de démarrer la migration, l’application cible ASP.NET Framework, puis s’exécute sous Windows avec ses bibliothèques de prise en charge :

Before starting the migration

La migration commence par l’introduction d’une nouvelle application basée sur ASP.NET Core qui devient le point d’entrée. Les requêtes entrantes sont envoyées à l’application ASP.NET Core, qui gère ou proxyse la requête vers l’application .NET Framework via YARP. Au début, la majorité du code fournissant des réponses se trouve dans l’application .NET Framework, mais l’application ASP.NET Core est maintenant configurée pour démarrer la migration des itinéraires :

start updating routes

Pour migrer une logique métier qui s’appuie sur HttpContext, les bibliothèques doivent être générées avec Microsoft.AspNetCore.SystemWebAdapters. La génération de bibliothèques avec SystemWebAdapters permet :

  • De générer des bibliothèques sur .NET Framework, .NET Core ou .NET Standard 2.0.
  • De vérifier que les bibliothèques utilisent des API disponibles sur ASP.NET Framework et ASP.NET Core.

Microsoft.AspNetCore.SystemWebAdapters

Une fois l’application ASP.NET Core utilisant YARP configurée, vous pouvez commencer à mettre à jour les itinéraires d’ASP.NET Framework vers ASP.NET Core. Par exemple, des méthodes d’action de contrôleur WebAPI ou MVC, des gestionnaires ou une autre implémentation d’un itinéraire. Si l’itinéraire est disponible dans l’application ASP.NET Core, il est mis en correspondance, puis traité.

Pendant le processus de migration, des services et une infrastructure supplémentaires sont identifiés et doivent être mis à jour pour s’exécuter sur .NET Core. Les options répertoriées par ordre de facilité de maintenance sont les suivantes :

  1. Déplacer le code vers des bibliothèques partagées
  2. Lier le code dans le nouveau projet
  3. Dupliquer le code

Finalement, l’application ASP.NET Core gère une plus grande partie des itinéraires que l’application .NET Framework :

the ASP.NET Core app handles more of the routes

Une fois que l’application ASP.NET Framework n’est plus nécessaire et qu’elle est supprimée :

  • L’application s’exécute sur la pile d’applications ASP.NET Core mais utilise toujours les adaptateurs.
  • Le travail de migration restant consiste à supprimer l’utilisation d’adaptateurs.

final pic

L’extension Visual Studio .NET Upgrade Assistant peut vous aider à mettre à niveau les applications web ASP.NET Framework vers ASP.NET Core. Si vous souhaitez en savoir plus, veuillez consulter le billet de blog Mise à niveau de vos projets .NET avec Visual Studio.

Adaptateurs System.Web

L’espace de noms Microsoft.AspNetCore.SystemWebAdapters est une collection d’assistances de runtime qui facilitent l’utilisation du code écrit sur System.Web lors du passage à ASP.NET Core. Plusieurs packages permettent d’utiliser les fonctionnalités de ces adaptateurs :

  • Microsoft.AspNetCore.SystemWebAdapters : ce package est utilisé dans la prise en charge des bibliothèques et fournit les API System.Web sur lesquelles vous avez peut-être pris une dépendance, comme HttpContext et d’autres. Ce package cible .NET Standard 2.0, .NET 4.5+ et .NET 6+.
  • Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices : ce package cible uniquement .NET Framework et est destiné à fournir des services aux applications ASP.NET Framework qui devront sans doute fournir des migrations incrémentielles. Il n’est généralement pas référencé depuis les bibliothèques, mais plutôt depuis les applications proprement dites.
  • Microsoft.AspNetCore.SystemWebAdapters.CoreServices : ce package cible uniquement .NET 6+ et est destiné à fournir des services aux applications ASP.NET Core pour configurer le comportement des API System.Web et opter pour des comportements de migration incrémentielle. Il n’est généralement pas référencé depuis les bibliothèques, mais plutôt depuis les applications proprement dites.
  • Microsoft.AspNetCore.SystemWebAdapters.Abstractions : ce package est un package de prise en charge qui fournit des abstractions pour les services utilisés à la fois par les applications ASP.NET Core et ASP.NET Framework, comme la sérialisation de l’état de session.

Pour obtenir des exemples de scénarios où cette fonctionnalité est utile, veuillez consulter l’article sur les adaptateurs.

Pour obtenir une aide sur l’utilisation, veuillez consultez l’article Aide sur l’utilisation.

Ressources supplémentaires