Uaktualnianie aplikacji .NET przy użyciu modernizacji GitHub Copilot

Modernizacja z użyciem GitHub Copilot to agent oparty na sztucznej inteligencji, który uaktualnia projekty .NET do nowszych wersji i migruje aplikacje na platformę Azure. W tym artykule przedstawiono proces uaktualniania aplikacji .NET za pomocą ustrukturyzowanego przepływu pracy trzyetapowego: oceny, planowania i wykonywania.

Agent modernizacji analizuje projekty i zależności, tworzy szczegółową dokumentację uaktualniania na każdym etapie i pomaga w poprawkach kodu w całym procesie. Agent obsługuje uaktualnianie ze starszych wersji .NET do najnowszej wersji, w tym uaktualnienia z platformy .NET Framework do nowoczesnych .NET.

Wymagania wstępne

Skonfiguruj modernizację GitHub Copilot w środowisku deweloperskim przed rozpoczęciem aktualizacji. Aby uzyskać instrukcje instalacji, zobacz Instalacja GitHub Copilot Modernization.

Inicjowanie uaktualnienia

Aby rozpocząć uaktualnianie, użyj agenta modernize-dotnet w Copilot:

  1. Otwórz projekt lub rozwiązanie .NET w środowisku projektowym.

  2. Uruchom agenta przy użyciu jednej z następujących metod:

    • Visual Studio: kliknij prawym przyciskiem myszy rozwiązanie lub projekt w Eksplorator rozwiązań i wybierz Modernize. Możesz też otworzyć okno GitHub Copilot Chat i wpisz @Modernize.
    • Visual Studio Code: Otwórz GitHub Copilot Chat panelu i wpisz @modernize-dotnet.
    • interfejs wiersza polecenia GitHub Copilot: wpisz @modernize-dotnet, a następnie żądanie uaktualnienia lub migracji.
    • GitHub.com: użyj agenta kodowania modernize-dotnet w repozytorium.
  3. Poinformuj agenta, co należy uaktualnić lub zmigrować.

Po rozpoczęciu uaktualniania Copilot zbiera informacje wstępne: docelową wersję platformy, strategię rozgałęziania Git i tryb przepływu pracy (automatyczny lub kierowany przez Ciebie). Copilot następnie ocenia twój projekt i uruchamia trzyetapowy proces, pisząc pliki Markdown dla każdego etapu w obszarze .github/upgrades/{scenarioId} w twoim repozytorium. Wartość {scenarioId} jest unikatowym identyfikatorem typu uaktualnienia, takim jak dotnet-version-upgrade. Jeśli .github/upgrades/{scenarioId} już istnieje z wcześniejszej próby, Copilot pyta, czy kontynuować, czy rozpocząć od nowa.

Trzy etapy to:

  • Etap oceny. Copilot analizuje twój projekt, przedstawia decyzje strategiczne do przeglądu i zapisuje potwierdzone decyzje. Dostosuj ocenę przed kontynuowaniem.
  • Etap planowania. Copilot tworzy szczegółową specyfikację z krokami umożliwiającymi osiągnięcie docelowego uaktualnienia.
  • Etap wykonywania. Copilot dzieli plan na zadania sekwencyjne i wykonuje uaktualnienie.

Przegląd oceny

Ocena sprawdza strukturę projektu, zależności i wzorce kodu, aby zidentyfikować, co należy zmienić. Copilot automatycznie uruchamia ocenę i generuje plik assessment.md w .github/upgrades/{scenarioId}.

Ocena zawiera listę zmian niezgodnych, problemy ze zgodnością interfejsu API, przestarzałe wzorce i zakres aktualizacji. Poniższy przykład przedstawia część oceny projektu ASP.NET Core uaktualnianego z wersji .NET 6.0 do .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)

...

Aby przejrzeć i dostosować ocenę:

  1. Otwórz plik assessment.md w .github/upgrades/{scenarioId}.
  2. Przejrzyj zidentyfikowane zmiany powodujące niezgodność i problemy zgodności.
  3. Dodaj kontekst lub obawy specyficzne dla projektu do dokumentu.
  4. Poinformuj Copilot, aby przeszedł do etapu planowania.

Przejrzyj opcje uaktualniania

Po przeprowadzeniu oceny Copilot ocenia rozwiązanie i przedstawia do przeglądu decyzje dotyczące strategii uaktualnienia. Agent zaleca podejście bazujące na strukturze twojego projektu i zapisuje potwierdzone decyzje w upgrade-options.md w .github/upgrades/{scenarioId}.

Opcje zazwyczaj obejmują:

  • Strategia aktualizacji. Oddolne (najpierw projekty szczegółowe), odgórne (najpierw aplikacja) lub wszystkie naraz (wszystkie projekty w jednym etapie).
  • Podejście do modernizacji projektu. Ponowne zapisywanie w miejscu lub uaktualnianie równoległe.
  • Modernizacja technologii. Czy uaktualnić technologie, takie jak Entity Framework (EF6 do EF Core), iniekcja zależności, rejestrowanie i konfiguracja.
  • Zarządzanie pakietami. Czy wdrożyć centralne zarządzanie pakietami.
  • Obsługa zgodności. Jak radzić sobie z nieobsługiwanymi interfejsami API, niezgodnymi pakietami i funkcjonalnościami specyficznymi dla platformy.

Przejrzyj proponowane opcje i potwierdź lub przesłoń je. Poinformuj Copilot, aby przeszedł do etapu planowania.

Rozpoczynanie planowania i przeglądanie planu

Etap planowania konwertuje ocenę i potwierdzone opcje uaktualniania na szczegółową specyfikację, która wyjaśnia, jak rozwiązać każdy problem. Gdy poinformujesz Copilot o kontynuowaniu planowania, generuje on plik plan.md w .github/upgrades/{scenarioId}. Agent również tworzy plik scenario-instructions.md, który przechowuje preferencje, decyzje i niestandardowe instrukcje dotyczące aktualizacji.

Plan dokumentuje strategie uaktualniania, metody refaktoryzacji, ścieżki uaktualniania zależności i środki zaradcze ryzyka. Poniższy przykład przedstawia część planu dla projektu 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)

...

Aby przejrzeć i dostosować plan:

  1. Otwórz plik plan.md w .github/upgrades/{scenarioId}.

  2. Przejrzyj strategie uaktualniania i aktualizacje zależności.

  3. Edytuj plan, aby dostosować kroki uaktualniania lub dodać kontekst zgodnie z potrzebami.

    Ostrzeżenie

    Plan zależy od współzależności projektu. Uaktualnienie nie powiedzie się, jeśli zmodyfikujesz plan w sposób uniemożliwiający ukończenie ścieżki uaktualnienia. Jeśli na przykład Project A zależy od Project B i usuniesz Project B z planu uaktualniania, uaktualnienie Project A3 może zakończyć się niepowodzeniem.

  4. Poinformuj Copilota, aby przeszedł do fazy wykonawczej.

Rozpocznij wykonanie i przeprowadź uaktualnienie

Etap wykonywania dzieli plan na sekwencyjne, konkretne zadania z kryteriami weryfikacji. Gdy poinformujesz Copilot o kontynuowaniu wykonywania, generuje on plik tasks.md w .github/upgrades/{scenarioId}.

Lista zadań opisuje każde zadanie i sposób, w jaki Copilot weryfikuje powodzenie. W poniższym przykładzie przedstawiono listę zadań dla rozwiązania zawierającego projekty ASP.NET Core i 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"

Aby uruchomić uaktualnienie:

  1. Poinformuj Copilot, aby rozpoczął aktualizację.
  2. Monitoruj postęp, przeglądając plik tasks.md w miarę jak Copilot aktualizuje stany zadań.
  3. Jeśli Copilot napotka problem, którego nie można rozwiązać, podaj żądaną pomoc.
  4. Na podstawie Twoich decyzji i zmian Copilot dostosowuje swoją strategię do pozostałych zadań i kontynuuje uaktualnianie.

Copilot zatwierdza zmiany zgodnie ze strategią Git skonfigurowaną podczas wstępnej inicjalizacji: na zadanie, na grupę zadań lub na końcu.

Weryfikowanie uaktualnienia

Po zakończeniu uaktualniania Copilot pokazuje zalecane następne kroki w odpowiedzi na czat. Przejrzyj plik w pliku tasks.md , .github/upgrades/{scenarioId} aby uzyskać stan każdego kroku.

W poniższym przykładzie przedstawiono ukończone zadania uaktualniania projektu 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**)

...

Aby zweryfikować uaktualnienie:

  1. Przejrzyj stan ostatniego zadania w pliku tasks.md.
  2. Rozwiąż wszelkie nieudane testy lub błędy kompilacji.
  3. Upewnij się, że wszystkie zaktualizowane pakiety NuGet są zgodne z aplikacją.
  4. Dokładnie przetestuj aplikację, aby sprawdzić, czy uaktualnienie zakończyło się pomyślnie.
  5. Zastosuj nowe funkcje i ulepszenia dostępne w uaktualnionej wersji .NET.