Compartir a través de


Actualización de una aplicación de .NET con modernización de GitHub Copilot

GitHub Copilot es un agente de modernización con tecnología de inteligencia artificial que actualiza proyectos de .NET a versiones más recientes y migra aplicaciones a Azure. En este artículo se explica cómo actualizar las aplicaciones de .NET con un flujo de trabajo estructurado de tres fases: evaluación, planeamiento y ejecución.

El agente de modernización analiza los proyectos y las dependencias, crea documentación de actualización detallada en cada fase y ayuda con correcciones de código en todo el proceso. El agente admite la actualización de versiones anteriores de .NET a la más reciente, incluidas las migraciones de .NET Framework a .NET modernas.

Prerrequisitos

Configura el entorno de desarrollo para utilizar GitHub Copilot antes de iniciar una actualización. Para conocer los pasos de instalación, consulte Instalar la modernización de GitHub Copilot.

Iniciar la actualización

Para iniciar una actualización, use el agente de modernize-dotnet en Copilot:

  1. Abra el proyecto o la solución de .NET en el entorno de desarrollo.

  2. Inicie el agente usando uno de estos métodos.

    • Visual Studio: haga clic con el botón derecho en la solución o proyecto en Explorador de soluciones y seleccione Modernize. O bien, abra la ventana GitHub Copilot Chat y escriba @Modernize.
    • Visual Studio Code: abra el panel GitHub Copilot Chat y escriba @modernize-dotnet.
    • GitHub Copilot CLI: escriba @modernize-dotnet seguido de la solicitud de actualización o migración.
    • GitHub.com: use el agente de codificación /modernize-dotnet en el repositorio.
  3. Dígale al agente qué actualizar o migrar.

Al iniciar la actualización, Copilot recopila información de inicialización previa: la versión del marco de destino, la estrategia de bifurcación de Git y el modo de flujo de trabajo (automático o guiado por usted). Copilot luego evalúa el proyecto y ejecuta un flujo de trabajo de tres fases, escribiendo archivos Markdown para cada fase en .github/upgrades/{scenarioId} en el repositorio. El {scenarioId} valor es un identificador único para el tipo de actualización, como dotnet-version-upgrade. Si .github/upgrades/{scenarioId} ya existe a partir de un intento anterior, Copilot pregunta si desea continuar o comenzar de nuevo.

Las tres fases son:

  • Fase de evaluación. Copilot examina el proyecto, presenta decisiones de estrategia para su revisión y guarda las decisiones confirmadas. Personalice la evaluación antes de continuar.
  • Fase de planificación. Copilot crea una especificación detallada con los pasos para llegar a la actualización de destino.
  • Fase de ejecución. Copilot divide el plan en tareas secuenciales y realiza la actualización.

Revisión de la evaluación

La evaluación examina la estructura del proyecto, las dependencias y los patrones de código para identificar lo que necesita cambiar. Copilot inicia automáticamente la evaluación y genera un archivo en assessment.md en .github/upgrades/{scenarioId}.

En la evaluación se enumeran los cambios importantes, los problemas de compatibilidad de API, los patrones en desuso y el ámbito de actualización. En el ejemplo siguiente se muestra parte de una evaluación de un proyecto de actualización de ASP.NET Core de .NET 6.0 a .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 revisar y personalizar la evaluación:

  1. Abra el assessment.md archivo en .github/upgrades/{scenarioId}.
  2. Revise los cambios disruptivos identificados y los problemas de compatibilidad.
  3. Agregue contexto o preocupaciones específicos del proyecto al documento.
  4. Indique a Copilot que proceda a la fase de planeación.

Revisar las opciones de actualización

Después de la evaluación, Copilot evalúa la solución y presenta decisiones de estrategia de actualización para su revisión. El agente recomienda un enfoque basado en la estructura del proyecto y guarda las decisiones confirmadas en upgrade-options.md ..github/upgrades/{scenarioId}

Las opciones suelen incluir:

  • Estrategia de actualización. De abajo hacia arriba (primero proyectos individuales), de arriba hacia abajo (primero la aplicación) o todo de una vez (todos los proyectos en un solo proceso).
  • Enfoque de migración del proyecto. Reescritura local o migración en paralelo.
  • Modernización de la tecnología. Si quiere actualizar tecnologías como Entity Framework (EF6 a EF Core), inserción de dependencias, registro y configuración.
  • Administración de paquetes. Si se debe adoptar la administración central de paquetes.
  • Control de compatibilidad. Cómo abordar las API no admitidas, los paquetes incompatibles y la funcionalidad específica de la plataforma.

Revise las opciones propuestas y confirme o invalidelas. Indique a Copilot que proceda a la fase de planificación.

Empezar a planear y revisar el plan

La fase de planeación convierte la evaluación y las opciones de actualización confirmadas en una especificación detallada que explica cómo resolver cada problema. Cuando se indica a Copilot continuar con la planeación, genera un archivo plan.md en .github/upgrades/{scenarioId}. El agente también crea un scenario-instructions.md archivo que almacena preferencias, decisiones e instrucciones personalizadas para la actualización.

El plan documenta estrategias de actualización, enfoques de refactorización, rutas de actualización de dependencias y mitigaciones de riesgos. En el ejemplo siguiente se muestra parte de un plan para un proyecto 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 revisar y personalizar el plan:

  1. Abra el plan.md archivo en .github/upgrades/{scenarioId}.

  2. Revisar las estrategias de actualización y las modificaciones de dependencias.

  3. Edite el plan para ajustar los pasos de actualización o agregue contexto según sea necesario.

    Precaución

    El plan depende de las interdependencias del proyecto. La actualización no se realiza correctamente si modifica el plan de una manera que impide que se complete la ruta de migración. Por ejemplo, si Project A depende de Project B y quita Project B del plan de actualización, actualizar Project A podría producir un error.

  4. Dile a Copilot que pase a la fase de ejecución.

Iniciar la ejecución y ejecutar la actualización

La fase de ejecución divide el plan en tareas secuenciales y concretas con criterios de validación. Cuando le dices a Copilot que continúe con la ejecución, genera un archivo tasks.md en .github/upgrades/{scenarioId}.

La lista de tareas describe cada tarea y cómo Copilot valida el éxito. En el ejemplo siguiente se muestra una lista de tareas para una solución que contiene proyectos de ASP.NET Core y 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 ejecutar la actualización:

  1. Dígale a Copilot que inicie la actualización.
  2. Controla el progreso revisando el archivo tasks.md a medida que Copilot actualiza los estados de la tarea.
  3. Si Copilot encuentra un problema que no se puede resolver, proporcione la ayuda solicitada.
  4. En función de sus decisiones y cambios, Copilot adapta su estrategia a las tareas restantes y continúa la actualización.

Copilot confirma los cambios según la estrategia de Git que configuró durante la inicialización previa: por tarea, por grupo de tareas o al final.

Comprobación de la actualización

Cuando finalice la actualización, Copilot muestra los pasos siguientes recomendados en la respuesta del chat. Revise el tasks.md archivo en .github/upgrades/{scenarioId} para conocer el estado de cada paso.

En el ejemplo siguiente se muestran las tareas completadas para una actualización del proyecto de 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 comprobar la actualización:

  1. Revise el estado final de la tarea en tasks.md.
  2. Solucione las pruebas con errores o los errores de compilación.
  3. Asegúrese de que todos los paquetes NuGet actualizados son compatibles con la aplicación.
  4. Pruebe la aplicación exhaustivamente para comprobar que la actualización se ha realizado correctamente.
  5. Aplique nuevas características y mejoras disponibles en la versión actualizada de .NET.