Поделиться через


Обновление приложения .NET с помощью модернизации приложения GitHub Copilot

Модернизация приложений GitHub Copilot — это агент, на основе ИИ в Visual Studio, который обновляет проекты .NET до более новых версий и переносит приложения в Azure. В этой статье описывается обновление приложений .NET с помощью структурированного трехэтапного рабочего процесса: оценки, планирования и выполнения.

Агент модернизации анализирует проекты и зависимости, создает подробную документацию по обновлению на каждом этапе и помогает с исправлениями кода на протяжении всего процесса. Она поддерживает обновление старых версий .NET до последних версий, включая миграцию с .NET Framework на современную .NET.

Предпосылки

Перед началом работы убедитесь, что у вас есть следующие требования:

Запуск обновления

Чтобы начать обновление, взаимодействуйте с чатом GitHub Copilot, чтобы инициировать агент модернизации:

  1. Откройте проект или решение .NET в Visual Studio.

  2. Доступ к агенту модернизации приложений GitHub Copilot с помощью одного из следующих методов:

    Щелкните правой кнопкой мыши решение или проект в обозревателе решений и выберите "Модернизировать".

    —или—

    Откройте окно GitHub Copilot Chat и введите команду @modernize с запросом на обновление или миграцию.

  3. Сообщите агенту @modernize о том, что вы хотите обновить или перенести.

При запуске обновления Copilot предложит создать новую ветвь, если вы работаете в репозитории Git. Затем Copilot запускает трехэтапный рабочий процесс, записывая файл Markdown для каждого этапа в репозитории .github/upgrades. Если .github/upgrades уже существует с предыдущей попытки, Copilot спрашивает, следует ли продолжить или начать заново.

Три этапа:

  • Этап оценки — Copilot изучает проект для выявления критических изменений, проблем совместимости и требований к обновлению.
  • Этап планирования — Copilot создает подробную спецификацию, объясняющую, как устранить каждую проблему.
  • Этап выполнения — Copilot разбивает план на последовательные задачи и выполняет обновление.

Запуск оценки и проверки результатов

Этап оценки проверяет структуру проекта, зависимости и шаблоны кода, чтобы определить, что необходимо изменить. Copilot автоматически запускает этот этап, и создает файл assessment.md в .github/upgrades.

Оценка содержит критические изменения, проблемы совместимости API, устаревшие шаблоны и область обновления, чтобы точно знать, что требует внимания. В следующем примере показана часть оценки для проекта ASP.NET Core, обновляемого с .NET 6.0 до .NET 9.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)

...

Чтобы просмотреть и настроить план, выполните следующие действия.

  1. assessment.md Откройте файл в .github/upgrades.
  2. Прочтите выявленные нарушающие изменения и проблемы совместимости.
  3. Добавьте в документ любой контекст или проблемы, относящиеся к проекту.
  4. Поручите Copilot перейти на этап планирования.

Начало планирования и проверка плана

Этап планирования преобразует оценку в подробную спецификацию, которая объясняет, как устранить каждую проблему. Когда вы сообщаете Copilot, что нужно продолжить планирование, он создает файл plan.md в .github/upgrades.

Документы плана отображают стратегии обновления, подходы к рефакторингу, пути обновления зависимостей и меры по снижению рисков. В следующем примере показана часть плана для проекта 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)

...

Чтобы просмотреть и настроить план, выполните следующие действия.

  1. plan.md Откройте файл в .github/upgrades.

  2. Просмотрите стратегии обновления и обновления зависимостей.

  3. Измените план, чтобы изменить шаги обновления или добавить контекст при необходимости.

    Caution

    План основан на взаимозависимостях проектов. Обновление не будет выполнено, если вы измените план таким образом, что путь миграции не может завершиться. Например, если Project A зависит от Project B и вы удаляете Project B из плана обновления, обновление Project A может завершиться ошибкой.

  4. Попросите Copilot перейти к этапу выполнения.

Запуск выполнения и запуск обновления

Этап выполнения разбивает план на последовательные, конкретные задачи с критериями проверки. Когда вы сообщаете Copilot продолжить выполнение, он создает tasks.md файл в .github/upgrades.

Список задач описывает каждую задачу и объясняет, как Copilot подтверждает успешное выполнение. В следующем примере показан список задач для решения, содержащего проекты ASP.NET Core и 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"

Чтобы выполнить обновление, выполните следующие действия:

  1. Попросите Copilot начать обновление.
  2. Отслеживайте ход выполнения, просматривая файл tasks.md, пока Copilot обновляет статусы задач.
  3. Если Copilot сталкивается с проблемой, которую не может решить, предоставьте запрошенную помощь.
  4. Позвольте Copilot узнать о ваших вмешательствах и продолжить обновление.

Средство создает коммит Git для каждой части процесса, чтобы можно было легко откатить изменения или получить детальную информацию о том, что изменилось.

Проверка обновления

Когда обновление завершится, Copilot отображает следующие шаги в ответе чата, чтобы направить вас, что делать после завершения. Просмотрите tasks.md файл для состояния каждого шага. Средство создает коммит Git для каждой части процесса обновления, чтобы вы могли легко сделать откат изменений или получить подробные сведения о том, что изменилось.

В следующем примере показаны завершенные задачи для обновления проекта 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**)

...

Чтобы проверить обновление, выполните следующие действия.

  1. Просмотрите окончательное состояние задачи в tasks.md.
  2. Устранение любых ошибок неудачных тестов или ошибок компиляции.
  3. Убедитесь, что все обновленные пакеты NuGet совместимы с приложением.
  4. Тщательно протестируйте приложение, чтобы убедиться, что обновление выполнено успешно.
  5. Применение новых функций и улучшений, доступных в обновленной версии .NET.