Aktualizace aplikace .NET pomocí modernizace s GitHub Copilot

GitHub Copilot modernizace je agent využívající AI, který upgraduje projekty .NET na novější verze a migruje aplikace do Azure. Tento článek vás provede upgradem aplikací .NET strukturovaným třífázovým pracovním postupem: posouzení, plánování a provádění.

Agent modernizace analyzuje vaše projekty a závislosti, v každé fázi vytvoří podrobnou dokumentaci k upgradu a pomůže s opravami kódu v průběhu procesu. Agent podporuje upgrade ze starších verzí .NET na nejnovější, včetně upgradů z rozhraní .NET Framework na moderní .NET.

Požadavky

Před zahájením upgradu nastavte modernizování GitHub Copilot ve vašem vývojovém prostředí. Postup instalace najdete v části Modernizace GitHub Copilot.

Zahajte aktualizaci

Pokud chcete spustit upgrade, použijte agenta modernize-dotnet v Copilot:

  1. Otevřete projekt nebo řešení .NET ve vývojovém prostředí.

  2. Spusťte agenta některou z těchto metod:

    • Visual Studio: Klikněte pravým tlačítkem na řešení nebo projekt v Průzkumník řešení a vyberte Modernize. Nebo otevřete okno GitHub Copilot Chat a zadejte @Modernize.
    • Visual Studio Code: Otevřete panel GitHub Copilot Chat a zadejte @modernize-dotnet.
    • GitHub Copilot CLI: Zadejte @modernize-dotnet a potom požadavek na upgrade nebo migraci.
    • GitHub.com: Použijte agenta kódování modernize-dotnet v úložišti.
  3. Sdělete agentovi, co chcete upgradovat nebo migrovat.

Při spuštění upgradu Copilot shromažďuje informace o předběžné inicializaci: verze cílového rámce, strategie větvení Gitu a režim pracovního postupu (automatický nebo řízený vámi). Copilot pak vyhodnocuje váš projekt a spustí třífázový pracovní postup a zapíše soubory Markdownu pro každou fázi do .github/upgrades/{scenarioId} ve vašem úložišti. Hodnota {scenarioId} je jedinečný identifikátor pro typ upgradu, například dotnet-version-upgrade. Pokud .github/upgrades/{scenarioId} již existuje z předchozího pokusu, Copilot se zeptá, jestli chcete pokračovat nebo začít znovu.

Tři fáze jsou:

  • Fáze posouzení Copilot prozkoumá váš projekt, prezentuje rozhodnutí o strategii pro kontrolu a ukládá potvrzená rozhodnutí. Před pokračováním přizpůsobte posouzení.
  • Fáze plánování Copilot vytvoří podrobnou specifikaci s kroky pro dosažení cílového upgradu.
  • Fáze provádění. Copilot rozdělí plán na postupné úlohy a provede upgrade.

Kontrola posouzení

Posouzení prozkoumá strukturu projektu, závislosti a vzory kódu a zjistí, co se má změnit. Copilot automaticky spustí posouzení a vygeneruje soubor v assessment.md.github/upgrades/{scenarioId}.

Posouzení uvádí zásadní změny, problémy s kompatibilitou rozhraní API, zastaralé vzory a obor upgradu. Následující příklad ukazuje část posouzení aktualizace projektu ASP.NET Core z .NET 6.0 na .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)

...

Kontrola a přizpůsobení posouzení:

  1. Otevřete soubor assessment.md v .github/upgrades/{scenarioId}.
  2. Projděte si zjištěné zásadní změny a problémy s kompatibilitou.
  3. Přidejte do dokumentu kontext nebo obavy specifické pro projekt.
  4. Řekněte Copilotovi, aby pokračoval do fáze plánování.

Kontrola možností upgradu

Po posouzení Copilot vyhodnocuje vaše řešení a prezentuje rozhodnutí o strategii upgradu pro vaši kontrolu. Agent doporučuje přístup založený na struktuře projektu a ukládá potvrzená rozhodnutí do upgrade-options.md v .github/upgrades/{scenarioId}.

Mezi možnosti obvykle patří:

  • Strategie upgrade Zdola nahoru (první dílčí projekty), shora dolů (první aplikace) nebo vše najednou (všechny projekty najednou).
  • Přístup k upgradu projektu. Přepsání přímo na místě nebo souběžné vylepšení
  • Modernizace technologií. Zda upgradovat technologie, jako je Entity Framework (EF6 na EF Core), injektáž závislostí, protokolování a konfigurace
  • Správa balíčků. Zda přijmout centrální správu balíčků.
  • Zpracování kompatibility. Jak řešit nepodporovaná rozhraní API, nekompatibilní balíčky a funkce specifické pro platformu

Zkontrolujte navrhované možnosti a potvrďte je nebo změňte. Řekněte Copilotovi, aby pokračoval do fáze plánování.

Zahájení plánování a kontrola plánu

Fáze plánování převede posouzení a potvrzené možnosti upgradu na podrobnou specifikaci, která vysvětluje, jak vyřešit všechny problémy. Když Copilot řeknete, že chcete pokračovat v plánování, vygeneruje soubor plan.md v .github/upgrades/{scenarioId}. Agent také vytvoří scenario-instructions.md soubor, který ukládá předvolby, rozhodnutí a vlastní pokyny pro upgrade.

Plán dokumentuje strategie upgradu, přístupy refaktoringu, cesty upgradu závislostí a zmírnění rizik. Následující příklad ukazuje část plánu pro projekt 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)

...

Kontrola a přizpůsobení plánu:

  1. Otevřete soubor plan.md v .github/upgrades/{scenarioId}.

  2. Zkontrolujte strategie upgradu a aktualizace závislostí.

  3. Upravte plán a upravte kroky upgradu nebo podle potřeby přidejte kontext.

    Upozornění

    Plán závisí na závislostech mezi projekty. Upgrade nebude úspěšný, pokud plán upravíte způsobem, který brání dokončení cesty upgradu. Pokud například Project A závisí na Project B a odeberete Project B z plánu upgradu, upgrade Project A může selhat.

  4. Řekněte Copilotovi, aby přešel do fáze provádění.

Zahájit spouštění a provést upgrade

Fáze provádění rozdělí plán na postupné konkrétní úlohy s ověřovacími kritérii. Když řeknete Copilotu, aby přešel k provedení, vygeneruje soubor tasks.md v .github/upgrades/{scenarioId}.

Seznam úkolů popisuje každý úkol a způsob, jakým Copilot ověřuje úspěch. Následující příklad ukazuje seznam úkolů pro řešení obsahující projekty ASP.NET Core a WPF (Windows Presentation Foundation):

# 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"

Pro spuštění upgradu:

  1. Řekněte Copilotovi, aby zahájil upgrade.
  2. Sledujte průběh kontrolou souboru tasks.md, když Copilot aktualizuje stav úkolů.
  3. Pokud Copilot narazí na problém, který nedokáže vyřešit, zadejte požadovanou nápovědu.
  4. Na základě vašich rozhodnutí a změn Copilot přizpůsobuje svou strategii v závislosti na zbývajících úkolech a pokračuje v upgradu.

Copilot potvrdí změny podle strategie Gitu, kterou jste nakonfigurovali během předběžné inicializace: na každou úlohu, na skupinu úkolů nebo na konci.

Ověřte upgrade

Po dokončení upgradu Copilot zobrazí doporučené další kroky v odpovědi chatu. Zkontrolujte soubor tasks.md v .github/upgrades/{scenarioId} pro stav každého kroku.

Následující příklad ukazuje dokončené úkoly pro upgrade 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**)

...

Ověřte upgrade:

  1. Zkontrolujte stav posledního úkolu v tasks.md.
  2. Vyřešte všechny neúspěšné testy nebo chyby kompilace.
  3. Ujistěte se, že všechny aktualizované balíčky NuGet jsou kompatibilní s vaší aplikací.
  4. Důkladně otestujte aplikaci a ověřte, že upgrade proběhl úspěšně.
  5. Použijte nové funkce a vylepšení dostupná v upgradované verzi .NET.