Atualização incremental de ASP.NET para ASP.NET Core
Atualizar um aplicativo do ASP.NET Framework para o ASP.NET Core não é trivial para a maioria dos aplicativos de produção. Esses aplicativos geralmente incorporam novas tecnologias à medida que ficam disponíveis e geralmente são compostos por muitas decisões herdadas. Este artigo fornece diretrizes e links para ferramentas para atualizar aplicativos do ASP.NET Framework para ASP.NET Core com o mínimo de alterações possível.
Um dos maiores desafios é o uso generalizado de HttpContext em uma base de código. Sem a abordagem incremental e as ferramentas adequadas, uma reescrita de larga escala é necessária para remover a dependência HttpContext. Os adaptadores em dotnet/systemweb-adapters fornecem um conjunto de auxiliares de runtime para acessar os tipos usados no aplicativo ASP.NET Framework de uma maneira que funciona no ASP.NET Core com alterações mínimas.
Uma migração completa pode levar um esforço considerável dependendo do tamanho do aplicativo, das dependências e das APIs não portáteis usadas. Para continuar implantando um aplicativo em produção enquanto trabalha na atualização, o melhor padrão é seguir o padrão Strangler Fig. O padrão Strangler Fig permite o desenvolvimento contínuo no sistema antigo com uma abordagem incremental para substituir partes específicas da funcionalidade por novos serviços. Este documento descreve como aplicar o padrão Strangler Fig a um aplicativo ASP.NET migrando para ASP.NET Core.
Se você quiser ignorar este artigo de visão geral e começar, consulte Introdução.
Migração de aplicativo para o ASP.NET Core
Antes de iniciar a migração, o aplicativo tem como destino ASP.NET Framework e é executado no Windows com suas bibliotecas de suporte:
de migração
A migração começa introduzindo um novo aplicativo com base no ASP.NET Core que se torna o ponto de entrada. As solicitações de entrada vão para o aplicativo ASP.NET Core, que manipula a solicitação ou faz proxies da solicitação para o aplicativo .NET Framework via YARP. No início, a maioria dos códigos que fornecem respostas está no aplicativo .NET Framework, mas o aplicativo ASP.NET Core agora está configurado para iniciar a migração de rotas:
Para migrar a lógica de negócios que depende de HttpContext
, as bibliotecas precisam ser criadas com Microsoft.AspNetCore.SystemWebAdapters
. A criação das bibliotecas com SystemWebAdapters
permite:
- As bibliotecas a serem criadas no .NET Framework, no .NET Core ou no .NET Standard 2.0.
- Garante que as bibliotecas estejam usando APIs disponíveis no ASP.NET Framework e no ASP.NET Core.
Depois que o aplicativo ASP.NET Core usando YARP for configurado, você poderá começar a atualizar rotas do ASP.NET Framework para o ASP.NET Core. Por exemplo, métodos de ação do controlador WebAPI ou MVC, manipuladores ou alguma outra implementação de uma rota. Se a rota estiver disponível no aplicativo ASP.NET Core, ela será encontrada e servida.
Durante o processo de migração, são identificados serviços adicionais e infraestrutura que devem ser atualizados para serem executados no .NET Core. As opções listadas em ordem de manutenção incluem:
- Mover o código para bibliotecas compartilhadas
- Vincular o código no novo projeto
- Duplicar o código
Eventualmente, o aplicativo ASP.NET Core manipula mais das rotas do que o aplicativo .NET Framework:
Depois que o aplicativo ASP.NET Framework não for mais necessário e excluído:
- O aplicativo está em execução na pilha do aplicativo ASP.NET Core, mas ainda está usando os adaptadores.
- O trabalho de migração restante é remover o uso de adaptadores.
A extensão do Visual Studio o Assistente de Atualização do .NET pode ajudar a atualizar aplicativos Web do ASP.NET Framework para o ASP.NET Core. Para obter mais informações, consulte a postagem no blog Atualizando seus projetos do .NET com o Visual Studio.
Adaptadores System.Web
O namespace Microsoft.AspNetCore.SystemWebAdapters
é uma coleção de auxiliares de runtime que facilitam o uso de código gravado em System.Web
durante a mudança para ASP.NET Core. Há alguns pacotes que podem ser usados para usar recursos desses adaptadores:
Microsoft.AspNetCore.SystemWebAdapters
: Este pacote é usado para dar suporte a bibliotecas e fornecer as APIs System.Web das quais você pode ter se tornado dependente, comoHttpContext
e outras. Esse pacote tem como destino o .NET Standard 2.0, o .NET 4.5+ e o .NET 6+.Microsoft.AspNetCore.SystemWebAdapters.FrameworkServices
: esse pacote destina-se apenas ao .NET Framework e destina-se a fornecer serviços para aplicativos ASP.NET Framework que talvez precisem fornecer migrações incrementais. Geralmente, não se espera que isso seja referenciado por bibliotecas, mas sim pelos próprios aplicativos.Microsoft.AspNetCore.SystemWebAdapters.CoreServices
: Este pacote se destina exclusivamente ao .NET 6+ e tem como objetivo fornecer serviços para aplicativos ASP.NET Core, configurando o comportamento de APIs deSystem.Web
, além de adotar qualquer comportamento necessário para migração incremental. Geralmente, não se espera que isso seja referenciado por bibliotecas, mas sim pelos próprios aplicativos.Microsoft.AspNetCore.SystemWebAdapters.Abstractions
: esse pacote é um pacote de suporte que fornece abstrações para serviços usados pelo aplicativo ASP.NET Core e ASP.NET Framework, como serialização de estado de sessão.
Para obter exemplos de cenários em que isso é útil, consulte o artigo sobre adaptadores.
Para obter orientações sobre o uso, consulte o artigo de diretrizes de uso .