Migração de .NET Framework para .NET moderno.
WebForms, WinForms, WCF, ASP.NET MVC e Web API rodando no .NET Framework 4.x, levados para o .NET 10 sem parar a operação. Primeiro entendemos e documentamos o que o sistema faz; depois migramos por partes, mantendo o que funciona e reconstruindo o que não tem equivalente no .NET atual.
A migração de .NET Framework é o caso mais traiçoeiro entre os sistemas legados, justamente porque não parece legado. A linguagem continua sendo C# (ou VB.NET), o Visual Studio abre o projeto, a equipe ainda sabe mexer. Mas o sistema está preso a uma plataforma que parou de evoluir, e cada ano que passa a distância até o .NET atual aumenta. É um capítulo específico da migração de sistemas legados, com ferramentas próprias e armadilhas próprias.
Por que sair do .NET Framework
O .NET Framework 4.8.x é a última versão do Framework. A Microsoft continua publicando correções de segurança para ele, junto com o Windows, então ninguém vai acordar com o sistema fora do ar. O que acabou foi a evolução: todo recurso novo de linguagem, de desempenho e de plataforma acontece no .NET moderno, a linha que começou no .NET Core e seguiu como .NET 5, 6, 7, 8, 9 e .NET 10, versão LTS lançada em novembro de 2025.
Na prática, ficar no Framework significa:
- Preso ao Windows e ao IIS. Não roda em Linux nem em containers Linux, o que encarece servidor e nuvem e dificulta qualquer automação moderna de implantação.
- Sem novidades. As versões novas do C#, as melhorias de desempenho do runtime e as bibliotecas atuais miram o .NET moderno. Aos poucos, pacotes NuGet deixam de publicar versões compatíveis com o Framework.
- Componentes parados. Controles de terceiros, geradores de relatório e SDKs de integração costumam ter versões novas só para o .NET atual; a versão antiga que o sistema usa fica sem correção.
- Contratação mais difícil. Quem está entrando no mercado aprende ASP.NET Core, não WebForms nem WCF.
Nada disso exige pânico. Exige plano, porque a conta de esperar cresce em silêncio.
O que migra com facilidade
Boa parte de uma aplicação .NET Framework passa para o .NET moderno com ajuste, não com reescrita. É aqui que um sistema bem dividido em camadas colhe o que plantou.
- Bibliotecas de classes e regra de negócio. Cálculos, validações, entidades e serviços que não dependem de
System.Webcostumam compilar no .NET 10 com pouca mudança. Um passo intermediário útil é deixá-las compatíveis com as duas plataformas ao mesmo tempo, para que o sistema antigo e o novo usem o mesmo código durante a transição. - ASP.NET MVC e Web API. Controllers, rotas e views Razor têm equivalente direto no ASP.NET Core. Muda a infraestrutura em volta:
Global.asaxvira oProgram.cs, oweb.configviraappsettings.json, filtros e módulos HTTP viram middleware, e a injeção de dependência passa a ser nativa. - Acesso a dados. O Entity Framework 6 tem suporte ao .NET moderno, o que permite migrar a aplicação primeiro e o acesso a dados depois. A troca para o EF Core pode vir numa etapa seguinte, com calma. ADO.NET e Dapper atravessam praticamente sem mudança.
- WinForms e WPF. Existem no .NET moderno, só no Windows. A migração mantém a interface e ganha um runtime suportado; o trabalho costuma estar nos controles de terceiros, que precisam de versão compatível.
O que exige reconstrução
Algumas tecnologias do .NET Framework simplesmente não existem no .NET moderno. Não há conversão possível: há uma decisão de para onde levar cada uma.
| No .NET Framework | Situação no .NET moderno | Caminho usual |
|---|---|---|
| ASP.NET WebForms | Não existe. ViewState, postback e controles de servidor não foram portados. | Blazor, Razor Pages ou uma interface web separada consumindo uma API. |
| WCF (servidor) | Não existe no .NET moderno. O cliente WCF tem pacotes suportados. | ASP.NET Core Web API ou gRPC; o CoreWCF, projeto da comunidade, quando é preciso manter o contrato SOAP. |
| .NET Remoting | Não existe. | API HTTP, gRPC ou mensageria, conforme o tipo de comunicação. |
| AppDomains | Não é possível criar novos AppDomains. | Processos separados ou AssemblyLoadContext para carregar plugins. |
| System.Web | Não existe. HttpContext.Current, módulos e handlers mudam de modelo. | Reescrever o acesso ao contexto HTTP no modelo do ASP.NET Core, com middleware. |
O WebForms merece atenção especial. Em muitos sistemas, a regra de negócio mora no
code-behind: o cálculo do pedido está dentro do btnSalvar_Click, a consulta ao
banco está no Page_Load. Antes de pensar na tela nova, essa regra precisa ser tirada dali,
entendida e documentada. Quem pula essa etapa reconstrói a tela e descobre, em produção, a regra
que ficou para trás.
Ferramentas oficiais: apoio, não solução
A Microsoft oferece o .NET Upgrade Assistant, que converte o formato dos projetos, atualiza referências de pacotes, ajusta namespaces e aponta APIs incompatíveis. Em bibliotecas de classes e em projetos MVC simples, ele economiza dias de trabalho braçal, e nós usamos.
Mas é preciso saber o que ele não faz. Não reconstrói WebForms, não transforma um serviço WCF em API, não separa regra de tela e não escolhe arquitetura. O resultado de "rodar a ferramenta e corrigir até compilar" é um sistema que compila no .NET 10 com os mesmos problemas de antes. É o mesmo raciocínio que vale para qualquer conversor automático de código legado: útil como ferramenta pontual, perigoso como estratégia.
O método: entender, documentar, só então codificar
A NasteSoft e seus parceiros já migraram bancos de dados e aplicações em Delphi, VB6 e .NET, e o que aprendemos é que a parte cara de uma migração nunca é a sintaxe. É o que ninguém lembra que o sistema faz.
- Entender. Lemos o código, o banco, as telas em uso e os logs, e conversamos com quem opera. Mapeamos dependências: quais projetos usam
System.Web, onde há WCF, quais componentes de terceiros não têm versão atual. IA ajuda a ler mais rápido; quem valida é gente que conhece o processo. - Documentar. Regras de negócio, fluxos, cálculos, integrações e dados ficam registrados. Esse documento fica com você e vale mesmo que a tecnologia de destino mude daqui a cinco anos.
- Codificar. Só aí escrevemos o sistema novo, já na arquitetura certa: regra separada da interface, APIs bem definidas, testes automatizados nos fluxos críticos.
Imagine uma empresa de serviços com um portal em WebForms, um serviço WCF que recebe pedidos de parceiros e uma biblioteca de cálculo compartilhada. A biblioteca migra quase como está. O WCF vira uma Web API, com o contrato antigo mantido no ar até os parceiros trocarem. O portal é reconstruído área por área. Três partes, três estratégias diferentes, um único plano.
Migração incremental, com o sistema antigo no ar
Em aplicações web, o padrão de estrangulamento tem ferramentas prontas no próprio ecossistema .NET. Um proxy reverso, como o YARP (projeto de código aberto da Microsoft), fica na frente do sistema: as rotas já migradas vão para a nova aplicação ASP.NET Core e todo o resto continua sendo atendido pela aplicação antiga. O usuário não percebe a fronteira.
Os System.Web adapters, também da Microsoft, resolvem o ponto que costuma travar essa
convivência: permitem que as duas aplicações compartilhem sessão e autenticação durante a transição, e
que parte do código que dependia de System.Web rode no ASP.NET Core sem ser reescrita de
uma vez.
Com isso, cada etapa é pequena e reversível. Uma área migra, roda em paralelo, tem o resultado comparado com o antigo e só então assume. Se algo der errado, a rota volta. Não existe a madrugada da grande virada.
Para onde: .NET 10, Linux e o que vem depois
Para um projeto que começa hoje, o alvo é o .NET 10. O .NET 8 também é LTS, mas seu suporte termina em novembro de 2026; mirar nele agora significa outra atualização logo em seguida. Já no .NET moderno, subir de uma versão LTS para a próxima é trabalho de dias ou semanas, não um projeto.
Sair do Framework também abre portas que estavam fechadas: rodar em Linux e em containers, publicar com pipelines automáticos, expor o sistema por APIs para aplicativos e parceiros. Muitos clientes descobrem que a migração é o que finalmente permite levar o sistema para um aplicativo Android e iOS ou integrar com o que a operação precisa.
E o banco de dados?
Em muitos projetos .NET Framework o banco é um SQL Server antigo, às vezes já fora de suporte, com regras importantes escondidas em stored procedures e triggers. A aplicação pode migrar mantendo o banco, e frequentemente é o melhor primeiro passo. Quando o banco também precisa mudar de versão ou de produto, tratamos como frente própria, com ensaios e conferência automática. Veja como funciona a nossa migração de banco de dados.
O que fica com você
- Sistema no .NET 10, entregue por partes e validado em produção a cada etapa.
- Regras de negócio documentadas, inclusive as que estavam no code-behind e nas procedures.
- APIs no lugar de WCF e Remoting, prontas para integrar com o que vier.
- Testes automatizados nos fluxos críticos.
- Implantação automatizada, em Windows ou Linux, no servidor ou na nuvem.
Perguntas frequentes
O .NET Framework vai parar de funcionar?
Não de uma hora para outra. O .NET Framework 4.8.x é a última versão e continua recebendo correções de segurança junto com o Windows. O problema é outro: ele não evolui mais. Não ganha recursos, não roda fora do Windows e cada ano fica mais difícil achar bibliotecas, componentes e gente disposta a trabalhar nele.
A migração não é urgência de amanhã, mas é uma dívida que só cresce.
Para qual versão migrar: .NET 8 ou .NET 10?
Para um projeto que começa hoje, .NET 10. As duas são versões LTS, com suporte de três anos, mas o suporte do .NET 8 termina em novembro de 2026, enquanto o .NET 10, lançado em novembro de 2025, é suportado até 2028.
Quem já está no .NET 8 sobe para o 10 com pouco esforço; quem ainda está no .NET Framework deve mirar direto no 10.
O .NET Upgrade Assistant não faz a migração sozinho?
Faz a parte mecânica: converte o formato dos projetos, troca referências de pacotes, ajusta namespaces e aponta APIs incompatíveis. Em bibliotecas de classes e em projetos MVC simples isso economiza dias.
Mas ele não reconstrói WebForms, não transforma um serviço WCF em API e não decide a arquitetura. Usamos como ferramenta de apoio, nunca como estratégia.
Dá para migrar um sistema WebForms sem reescrever as telas?
Não. O WebForms não existe no .NET moderno: ViewState, postback e controles de servidor não têm equivalente direto. As telas precisam ser reconstruídas, em Blazor, Razor Pages ou numa interface web separada consumindo uma API.
O que se aproveita é a regra de negócio, desde que ela seja tirada do code-behind antes. Por isso documentamos primeiro e reconstruímos por partes, uma área do sistema por vez.
É possível migrar por partes, com o sistema antigo no ar?
Sim, e é como recomendamos. Em aplicações web, um proxy reverso como o YARP fica na frente: as rotas já migradas vão para a aplicação ASP.NET Core nova e o resto continua no sistema antigo. Os System.Web adapters, da Microsoft, permitem compartilhar sessão e autenticação entre as duas aplicações durante a transição.
Cada rota que muda de lado pode voltar em minutos se algo der errado.
Meu sistema WinForms precisa virar web?
Não necessariamente. O WinForms existe no .NET moderno e muitos sistemas desktop migram para ele mantendo a interface, ganhando desempenho e um runtime suportado, mas continuando só no Windows. Se o objetivo é acesso pelo navegador, pelo celular ou fora da rede da empresa, aí a interface precisa ser refeita.
A decisão é de negócio; o que fazemos antes é separar a regra das telas, porque ela serve aos dois caminhos.
Continue por aqui.
Seu sistema ainda roda no .NET Framework?
Conte o que ele tem — WebForms, MVC, WCF, WinForms, qual banco — e o que mais preocupa. Respondemos com uma leitura honesta do caminho, do que migra e do que precisa ser reconstruído.
WhatsApp +55 41 99511-2870 · e-mail rafael.naste@nastesoft.com.br