Atualizar um aplicativo .NET com a modernização através do GitHub Copilot

GitHub Copilot é um agente com tecnologia de IA que moderniza projetos .NET para versões mais recentes e migra aplicativos para o Microsoft Azure. Este artigo explica como atualizar seus aplicativos .NET com um fluxo de trabalho estruturado de três estágios: avaliação, planejamento e execução.

O agente de modernização analisa seus projetos e dependências, cria uma documentação detalhada de atualização em cada estágio e ajuda com correções de código durante todo o processo. O agente dá suporte à atualização de versões de .NET mais antigas para as mais recentes, incluindo atualizações do .NET Framework para o .NET moderno.

Pré-requisitos

Configure a modernização do GitHub Copilot em seu ambiente de desenvolvimento antes de começar a atualização. Para obter as etapas de instalação, consulte Modernização do GitHub Copilot.

Iniciar a atualização

Para iniciar uma atualização, use o agente modernize-dotnet no Copilot:

  1. Abra seu .NET projeto ou solução em seu ambiente de desenvolvimento.

  2. Inicie o agente usando um destes métodos:

    • Visual Studio: clique com o botão direito do mouse na solução ou projeto em Gerenciador de Soluções e selecione Modernize. Ou abra a janela GitHub Copilot Chat e digite @Modernize.
    • Visual Studio Code: abra o painel do GitHub Copilot Chat e digite @modernize-dotnet.
    • GitHub Copilot CLI: digite @modernize-dotnet seguido de sua solicitação de atualização ou migração.
    • GitHub.com: use o agente de codificação modernize-dotnet em seu repositório.
  3. Diga ao agente o que deve ser atualizado ou migrado.

Quando você inicia a atualização, Copilot coleta informações de pré-inicialização: a versão da estrutura de destino, a estratégia de ramificação do Git e o modo de fluxo de trabalho (automático ou guiado por você). Copilot avalia seu projeto e executa um fluxo de trabalho de três estágios, gravando arquivos Markdown para cada estágio em .github/upgrades/{scenarioId} em seu repositório. O {scenarioId} valor é um identificador exclusivo para o tipo de atualização, como dotnet-version-upgrade. Se .github/upgrades/{scenarioId} já existir de uma tentativa anterior, Copilot perguntará se deseja continuar ou iniciar novamente.

Os três estágios são:

  • Estágio de avaliação. Copilot examina seu projeto, apresenta decisões de estratégia para sua revisão e salva decisões confirmadas. Personalize a avaliação antes de continuar.
  • Estágio de planejamento. Copilot cria uma especificação detalhada com as etapas para alcançar a meta de atualização.
  • Estágio de execução. Copilot divide o plano em tarefas sequenciais e executa a atualização.

Examinar a avaliação

A avaliação examina a estrutura do projeto, as dependências e os padrões de código para identificar o que precisa ser alterado. Copilot inicia automaticamente a avaliação e gera um arquivo assessment.md em .github/upgrades/{scenarioId}.

A avaliação lista alterações disruptivas, problemas de compatibilidade de API, padrões obsoletos e escopo de atualização. O exemplo a seguir mostra parte de uma avaliação de um projeto de ASP.NET Core que está atualizando do .NET 6.0 para o .NET 10.0:

# Projects and dependencies analysis

This document provides a comprehensive overview of the projects and their dependencies in the context of upgrading to .NETCoreApp,Version=v10.0.

## Table of Contents

- [Executive Summary](#executive-Summary)
  - [Highlevel Metrics](#highlevel-metrics)
  - [Projects Compatibility](#projects-compatibility)
  - [Package Compatibility](#package-compatibility)
  - [API Compatibility](#api-compatibility)
- [Aggregate NuGet packages details](#aggregate-nuget-packages-details)
- [Top API Migration Challenges](#top-api-migration-challenges)
  - [Technologies and Features](#technologies-and-features)
  - [Most Frequent API Issues](#most-frequent-api-issues)
- [Projects Relationship Graph](#projects-relationship-graph)
- [Project Details](#project-details)

  - [MvcMovie.Tests\MvcMovie.Tests.csproj](#mvcmovietestsmvcmovietestscsproj)
  - [MvcMovie\MvcMovie.csproj](#mvcmoviemvcmoviecsproj)
  - [RazorMovie.Tests\RazorMovie.Tests.csproj](#razormovietestsrazormovietestscsproj)
  - [RazorMovie\RazorMovie.csproj](#razormovierazormoviecsproj)
  - [WpfMovie.Tests\WpfMovie.Tests.csproj](#wpfmovietestswpfmovietestscsproj)
  - [WpfMovie\WpfMovie.csproj](#wpfmoviewpfmoviecsproj)

...

Para examinar e personalizar a avaliação:

  1. Abra o assessment.md arquivo em .github/upgrades/{scenarioId}.
  2. Analise as alterações de falha e os problemas de compatibilidade identificados.
  3. Adicione contexto ou preocupações específicos do projeto ao documento.
  4. Diga ao Copilot para prosseguir para a fase de planejamento.

Examinar as opções de atualização

Após a avaliação, Copilot avalia sua solução e apresenta decisões de estratégia de atualização para sua revisão. O agente recomenda uma abordagem com base na estrutura do seu projeto e salva as decisões confirmadas em upgrade-options.md em .github/upgrades/{scenarioId}.

As opções normalmente incluem:

  • Estratégia de atualização. De baixo para cima (projetos iniciais primeiro), de cima para baixo (aplicativo primeiro) ou tudo de uma vez (todos os projetos de uma vez).
  • Abordagem de atualização do projeto. Reescrita no local ou atualização paralela.
  • Modernização da tecnologia. Caso queira atualizar tecnologias como Entity Framework (do EF6 para EF Core), injeção de dependências, registro de logs e configuração.
  • Gerenciamento de pacotes. Se você deve adotar o Gerenciamento Central de Pacotes.
  • Tratamento de compatibilidade. Como lidar com APIs sem suporte, pacotes incompatíveis e funcionalidade específica da plataforma.

Examine as opções propostas e confirme ou substitua-as. Diga ao Copilot para prosseguir para a fase de planejamento.

Iniciar o planejamento e examinar o plano

O estágio de planejamento converte a avaliação e as opções de atualização confirmadas em uma especificação detalhada que explica como resolver cada problema. Quando você diz a Copilot para prosseguir com o planejamento, ele gera um arquivo plan.md em .github/upgrades/{scenarioId}. O agente também cria um scenario-instructions.md arquivo que armazena preferências, decisões e instruções personalizadas para a atualização.

O plano documenta estratégias de atualização, abordagens de refatoração, caminhos de atualização de dependência e mitigações de risco. O exemplo a seguir mostra parte de um plano para um projeto de ASP.NET Core:

# .NET 10 Upgrade Plan

## Table of Contents

- [Executive Summary](#executive-summary)
- [Migration Strategy](#migration-strategy)
- [Detailed Dependency Analysis](#detailed-dependency-analysis)
- [Project-by-Project Plans](#project-by-project-plans)
- ... <removed to save space> ...
- ...

---

## Executive Summary

### Scenario Description
Upgrade all projects in the MvcMovieNet6 solution from .NET 6 to .NET 10 (Long Term Support). The solution contains:
- **RazorMovie**: ASP.NET Core Razor Pages application (primary focus)
- **MvcMovie**: ASP.NET Core MVC application
- **WpfMovie**: Windows Presentation Foundation desktop application
- **3 Test Projects**: Unit test projects for each application

### Scope & Current State
- **6 projects** requiring framework upgrade (net6.0 → net10.0)
- **1,862 total lines of code** across 54 files
- **16 NuGet packages** (6 require updates, 10 compatible)
- **65 identified issues** (1 security vulnerability, 1 deprecated package, 51 WPF API issues, minor behavioral changes)
- **All projects are SDK-style** (modern project format)

...

Para examinar e personalizar o plano:

  1. Abra o plan.md arquivo em .github/upgrades/{scenarioId}.

  2. Analise as estratégias de atualização e as atualizações de dependência.

  3. Edite o plano para ajustar as etapas de atualização ou adicionar contexto conforme necessário.

    Cuidado

    O plano depende das interdependências do projeto. A atualização não terá êxito se você modificar o plano de uma maneira que impeça a conclusão do caminho de atualização. Por exemplo, se Project A depender de Project B e você remover Project B do plano de atualização, a atualização Project A poderá falhar.

  4. Diga ao Copilot para passar ao estágio de execução.

Iniciar a execução e executar a atualização

O estágio de execução divide o plano em tarefas sequenciais e concretas com critérios de validação. Quando você instruir Copilot para continuar a execução, ele gera um arquivo tasks.md em .github/upgrades/{scenarioId}.

A lista de tarefas descreve cada tarefa e como Copilot valida o sucesso. O exemplo a seguir mostra uma lista de tarefas para uma solução que contém projetos ASP.NET Core e WPF:

# MvcMovieNet6 .NET 10 Upgrade Tasks

## Overview

This document tracks the execution of the MvcMovieNet6 solution upgrade from .NET 6 to .NET 10. All projects will be upgraded simultaneously in a single atomic operation.

**Progress**: 0/3 tasks complete (0%) ![0%](https://progress-bar.xyz/0)

---

## Tasks

### [ ] TASK-001: Verify prerequisites
**References**: Plan §Phase 0

- [ ] (1) Verify .NET 10 SDK installed per Plan §Phase 0
- [ ] (2) .NET 10 SDK meets minimum requirements (**Verify**)

---

### [ ] TASK-002: Atomic framework and package upgrade with compilation fixes
**References**: Plan §Phase 1, Plan §Package Update Reference, Plan §Breaking Changes Catalog, Plan §Project-by-Project Plans

- [ ] (1) Update TargetFramework to net10.0 in MvcMovie.csproj, MvcMovie.Tests.csproj, RazorMovie.csproj, RazorMovie.Tests.csproj per Plan §Phase 1
- [ ] (2) Update TargetFramework to net10.0-windows in WpfMovie.csproj, WpfMovie.Tests.csproj per Plan §Phase 1
- [ ] (3) All project files updated to target framework (**Verify**)
- [ ] (4) Update package references per Plan §Package Update Reference (MvcMovie: EF Core 10.0.1, Code Generation 10.0.0; RazorMovie: HtmlSanitizer 9.0.889 security fix)
- [ ] (5) All package references updated (**Verify**)
- [ ] (6) Restore all dependencies across solution
- [ ] (7) All dependencies restored successfully (**Verify**)
- [ ] (8) Build solution and fix all compilation errors per Plan §Breaking Changes Catalog (focus: BinaryFormatter removal in WpfMovie, WPF control API binary incompatibilities, UseExceptionHandler behavioral changes, HtmlSanitizer API changes)
- [ ] (9) Solution builds with 0 errors (**Verify**)
- [ ] (10) Commit changes with message: "TASK-002: Complete atomic upgrade to .NET 10 (all projects, packages, and compilation fixes)"

---

### [ ] TASK-003: Run full test suite and validate upgrade
**References**: Plan §Phase 2, Plan §Testing & Validation Strategy

- [ ] (1) Run tests in MvcMovie.Tests, RazorMovie.Tests, and WpfMovie.Tests projects
- [ ] (2) Fix any test failures (reference Plan §Breaking Changes Catalog for common issues: HtmlSanitizer behavior, BinaryFormatter replacement, framework behavioral changes)
- [ ] (3) Re-run all tests after fixes
- [ ] (4) All tests pass with 0 failures (**Verify**)
- [ ] (5) Commit test fixes with message: "TASK-003: Complete testing and validation for .NET 10 upgrade"

Para executar a atualização:

  1. Diga ao Copilot para iniciar a atualização.
  2. Monitore o progresso examinando o arquivo tasks.md à medida que Copilot atualiza os status da tarefa.
  3. Se Copilot encontrar um problema que não pode resolver, forneça a ajuda solicitada.
  4. Com base em suas decisões e alterações, Copilot adapta sua estratégia às tarefas restantes e continua a atualização.

Copilot confirma alterações de acordo com a estratégia do Git configurada durante a pré-inicialização: por tarefa, por grupo de tarefas ou no final.

Verificar a atualização

Quando a atualização for concluída, Copilot mostrará as próximas etapas recomendadas na resposta do chat. Revise o arquivo tasks.md em .github/upgrades/{scenarioId} para obter o status de cada etapa.

O exemplo a seguir mostra as tarefas concluídas para uma atualização de projeto ASP.NET Core:

# MvcMovieNet6 .NET 10 Upgrade Tasks

## Overview

This document tracks the execution of the MvcMovieNet6 solution upgrade from .NET 6 to .NET 10. All projects will be upgraded simultaneously in a single atomic operation.

**Progress**: 3/3 tasks complete (100%) ![0%](https://progress-bar.xyz/100)

---

## Tasks

### [✓] TASK-001: Verify prerequisites *(Completed: 2025-12-12 21:09)*
**References**: Plan §Phase 0

- [✓] (1) Verify .NET 10 SDK installed per Plan §Phase 0
- [✓] (2) .NET 10 SDK meets minimum requirements (**Verify**)

...

Para verificar a atualização:

  1. Examine o status da tarefa final em tasks.md.
  2. Resolva os testes com falha ou erros de compilação.
  3. Verifique se todos os pacotes NuGet atualizados são compatíveis com seu aplicativo.
  4. Teste seu aplicativo minuciosamente para verificar se a atualização foi bem-sucedida.
  5. Aplique novos recursos e melhorias disponíveis na versão de .NET atualizada.