Atualize uma aplicação .NET com a modernização do GitHub Copilot

A modernização do GitHub Copilot é um agente alimentado por IA que atualiza projetos .NET para versões mais recentes e migra aplicações para o Azure. Este artigo guia-o na atualização das suas aplicações .NET com um fluxo de trabalho estruturado em três etapas: avaliação, planeamento e execução.

O agente de modernização analisa os seus projetos e dependências, cria documentação detalhada de atualização em cada etapa e ajuda nas correções de código ao longo do processo. O agente suporta a atualização das versões antigas do .NET para as mais recentes, incluindo atualizações do .NET Framework para o .NET moderno.

Pré-requisitos

Configura a modernização do GitHub Copilot no teu ambiente de desenvolvimento antes de começares uma atualização. Para as instruções de instalação, veja modernização do GitHub Copilot.

Iniciar a atualização

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

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

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

    • Visual Studio: Clique com o botão direito na solução ou projeto em Explorador de Soluções e selecione Modernizar. Ou, abre a janela GitHub Copilot Chat e escreve @Modernize.
    • Visual Studio Code: Abra o painel GitHub Copilot Chat e escreva @modernize-dotnet.
    • GitHub Copilot CLI: Digite @modernize-dotnet seguido do seu pedido de atualização ou migração.
    • GitHub.com: Use o agente de codificação modernize-dotnet no seu repositório.
  3. Diz ao agente o que deve atualizar ou migrar.

Quando inicias a atualização, o Copilot recolhe informação pré-inicialização: a versão do framework alvo, a estratégia de ramificação Git e o modo de fluxo de trabalho (automático ou guiado por ti). Copilot então avalia o seu projeto e executa um fluxo de trabalho em três etapas, escrevendo ficheiros Markdown para cada etapa sob .github/upgrades/{scenarioId} no seu repositório. O {scenarioId} valor é um identificador único para o tipo de atualização, como dotnet-version-upgrade. Se .github/upgrades/{scenarioId} já existir de uma tentativa anterior, Copilot pergunta se deve continuar ou começar do zero.

As três fases são:

  • Fase de avaliação. O Copilot analisa o seu projeto, apresenta decisões estratégicas para análise e guarda as decisões confirmadas. Personalize a avaliação antes de avançar.
  • Fase de planeamento. O Copilot cria uma especificação detalhada com os passos para alcançar a atualização alvo.
  • Fase de execução. Copilot divide o plano em tarefas sequenciais e realiza a atualização.

Rever a avaliação

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

A avaliação lista alterações disruptivas, problemas de compatibilidade com APIs, padrões obsoletos e âmbito de atualização. O exemplo seguinte mostra parte de uma avaliação para um projeto ASP.NET Core a atualizar 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 rever e personalizar a avaliação:

  1. Abra o assessment.md ficheiro em .github/upgrades/{scenarioId}.
  2. Analise as alterações críticas identificadas e os problemas de compatibilidade.
  3. Adicione contexto específico do projeto ou preocupações ao documento.
  4. Diz ao Copilot para avançar para a fase de planeamento.

Revise as opções de atualização

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

As opções normalmente incluem:

  • Estratégia de atualização. De baixo para cima (projetos de folhas primeiro), de cima para baixo (aplicação primeiro) ou tudo de uma vez (todos os projetos numa só passagem).
  • Abordagem de atualização do projeto. Reescrita in loco ou atualização paralela.
  • Modernização tecnológica. Se deve atualizar tecnologias como Entity Framework (EF6 para EF Core), injeção de dependências, registo e configuração.
  • Gestão de pacotes. Se deve adotar a Gestão Central de Pacotes.
  • Gestão de compatibilidade. Como resolver APIs não suportadas, pacotes incompatíveis e funcionalidades específicas da plataforma.

Revise as opções propostas e confirme-as ou anule-as. Diz ao Copilot para avançar para a fase de planeamento.

Comece a planear e reveja o plano

A fase de planeamento converte a avaliação e as opções de atualização confirmadas numa especificação detalhada que explica como resolver todos os problemas. Quando dizes ao Copilot para avançar para o planeamento, gera um ficheiro plan.md em .github/upgrades/{scenarioId}. O agente também cria um scenario-instructions.md ficheiro 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, percursos de atualização de dependências e medidas de mitigação de risco. O exemplo seguinte mostra parte de um plano para um projeto 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 rever e personalizar o plano:

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

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

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

    Atenção

    O plano depende das interdependências do projeto. A melhoria não tem sucesso se modificares o plano de forma a impedir que o caminho da melhoria seja concluído. Por exemplo, se Project A depender de Project B e retirares Project B do plano de atualização, a atualização Project A pode falhar.

  4. Diz para o Copilot avançar para a etapa de execução.

Inicie a execução e execute a atualização

A fase de execução divide o plano em tarefas sequenciais e concretas com critérios de validação. Quando disser ao Copilot para avançar para a execução, será gerado um ficheiro tasks.md em .github/upgrades/{scenarioId}.

A lista de tarefas descreve cada tarefa e como o Copilot valida o sucesso. O exemplo seguinte 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. Monitorize o progresso ao rever o ficheiro tasks.md à medida que Copilot atualiza os estados das tarefas.
  3. Se o Copilot encontrar um problema que não consiga resolver, forneça a ajuda solicitada.
  4. Com base nas tuas decisões e alterações, o Copilot adapta a sua estratégia às tarefas restantes e continua a atualização.

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

Verificar a atualização

Quando a atualização termina, o Copilot mostra os próximos passos recomendados na resposta do chat. Verifique o ficheiro tasks.md no .github/upgrades/{scenarioId} para verificar o estado de cada etapa.

O exemplo seguinte mostra 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. Revise o estado final da tarefa em tasks.md.
  2. Corrigir quaisquer testes falhados ou erros de compilação.
  3. Certifique-se de que todos os pacotes NuGet atualizados sejam compatíveis com seu aplicativo.
  4. Teste a sua candidatura cuidadosamente para garantir que a atualização foi bem-sucedida.
  5. Aplique novas funcionalidades e melhorias disponíveis na versão .NET melhorada.