Aktualisieren Sie eine WPF-App auf .NET mithilfe von GitHub Copilot Modernization

In diesem Artikel wird das Upgrade einer WPF Desktop-App auf .NET mithilfe des GitHub Copilot Modernisierungs-Agents beschrieben. Der Agent wird in Ihrem Editor ausgeführt, analysiert das Projekt und steuert einen dreistufigen Workflow: Bewertung, Planung und Ausführung.

Im Beispiel wird das Vergleichsspielbeispiel verwendet, eine kleine .NET Framework-WPF-App aus einem Hauptprojekt und einer Klassenbibliothek.

Voraussetzungen

Tip

Stellen Sie sicher, dass Sie vor dem Start eine Sicherung Ihres Codes haben, z. B. in der Quellcodeverwaltung oder einer Kopie.

Öffnen der Lösung

Die Matching-Game-Projekte zielen auf .NET Framework 4.5 ab. Visual Studio Fordert Sie auf, die Projekte beim Öffnen der Lösung auf eine unterstützte Version von .NET Framework neu zuzuweisen.

  1. Öffnen Sie die MatchingGame-Lösung in Visual Studio.
  2. Visual Studio zeigt das Dialogfeld "Zielframework nicht installiert" an.
  3. Wählen Sie "Ziel aktualisieren" auf .NET Framework 4.8 (Empfohlen) und dann "Weiter" aus.
  4. Öffnen Sie das Fenster Git Changes, und committen Sie die Retargeting-Änderungen.

Wichtige Hinweise für Visual Basic

Der GitHub Copilot Modernisierungs-Agent unterstützt Visual Basic .NET Projekte nicht vollständig. Der Agent umfasst Leitplanken, die speziell dafür ausgelegt sind, sicherzustellen, dass C#-Projekte zuverlässig migriert werden; diese Leitplanken beeinträchtigen jedoch die Analyse und Ausführung von VB-Projekten. Wenn Ihre Lösung VB-Projekte enthält, verwenden Sie stattdessen eine der folgenden Alternativen:

  • GitHub Copilot (Standard-Agent):Verwenden Sie die reguläre Copilot-Agent – ohne den Modernisierungs-Agent – um das Upgrade interaktiv zu führen.
  • Installieren sie .NET Upgrade-Assistenten: Ein dediziertes Migrationstool mit VB-Unterstützung.

Tip

Wenn Ihre Lösung sowohl C#- als auch VB-Projekte enthält, können Sie den Modernisierungs-Agent weiterhin für die C#-Projekte verwenden. Aktualisieren Sie die VB-Projekte separat mithilfe einer der oben aufgeführten Alternativen.

Wenn Sie den Standard-Copilot-Agent verwenden oder manuell ein Upgrade durchführen, führen Sie die folgenden Schritte aus:

  1. Wenn das Projekt auf eine nicht unterstützte Version von .NET Framework ausgerichtet ist, sollten Sie es zuerst auf .NET Framework 4.8 zurücksetzen. Visual Studio fordert Sie dazu auf, wenn Sie die Projektmappe öffnen, oder Sie können dies in den Projekteigenschaften ändern.

  2. Aktualisieren Sie alle veralteten NuGet-Pakete auf ihre neuesten kompatiblen Versionen.

  3. Erstellen Sie ein neues VB-WPF Projekt mithilfe einer Visual Studio Vorlage oder dotnet new wpf -lang vb. Die Vorlage erstellt eine Projektdatei samt Einstellungen im SDK-Stil, die sich von denen in .NET Framework unterscheiden.

  4. Kopieren Sie Die .vb Quelldateien aus dem alten Projektordner in den neuen Projektordner.

  5. Kopieren Sie alle Nicht-Codedateien, von denen das Projekt abhängt, wie z. B. app.config-, .settings-Dateien, Bilder, Symbole und andere eingebettete Ressourcen.

  6. Öffnen Sie die alte Projektdatei (oder packages.config) und notieren Sie sich jeden NuGet-Paketverweis. Fügen Sie dieselben Pakete zum neuen Projekt mithilfe des NuGet-Paket-Managers oder dotnet add package <name> hinzu.

  7. Falls das Projekt auf andere Projekte in der Lösung verweist, fügen Sie diese Verweise im neuen Projekt erneut hinzu.

  8. Versuchen Sie, die Lösung zu erstellen. Beheben Sie noch keine Fehler – die Buildausgabe bietet Copilot eine konkrete Liste der Probleme, von denen aus zu arbeiten ist.

  9. Checken Sie den aktuellen Stand in die Versionsverwaltung ein, damit Sie eine saubere Ausgangsbasis haben, bevor Copilot Änderungen vornimmt.

  10. Öffnen Sie GitHub Copilot Chat, und bitten Sie ihn, die verbleibenden Probleme zu beheben. Beispiel:

    Dieses Visual Basic WPF Projekt wurde von .NET Framework 4.8 zu .NET 10 migriert. Die Projektdatei und Quelldateien sind vorhanden, die Lösung wird jedoch nicht kompiliert. Überprüfen Sie die Buildfehler und beheben Sie API-Inkompatibilitäten, fehlende Verweise und alle Konfigurationsmigrationsprobleme.

  11. Überprüfen Sie die Änderungen, die Copilot vorschlägt, und erstellen Sie das Projekt dann neu und testen Sie es.

Starten des Upgrades

Die Lösung "Matching Game" enthält die MatchingGame-App und die Klassenbibliothek "MatchingGame.Logic ". Der Agent stellt das Projektdiagramm eigenständig aus, also starten Sie das Upgrade auf Lösungsebene.

  1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Lösung, und wählen Sie "Modernisieren" aus.

    Das GitHub-Copilot Chat-Fenster wird geöffnet und startet eine Unterhaltung mit dem Modernisierungs-Agent.

  2. Wählen Sie ein Modell mit starken Logik- und Codierungsfunktionen aus.

  3. Teilen Sie dem Agent mit, was Sie tun möchten. Beispiel:

    Aktualisieren Sie alles auf .NET 10.

    Der Agent berichtet über den aktuellen Zustand der Codebasis und was er vorhat zu tun:

    • Target Framework: Gibt an, dass der Agent die Projekte auf .NET 10 aktualisiert.
    • Ablaufmodus: Standardmäßig auf "Automatisch" festgelegt. Bitten Sie den Agent bei komplexen Apps, zum geführten Modus zu wechseln.
    • Versionsverwaltung: Gibt an, dass der Agent einen neuen Arbeitszweig erstellt.

    Der Agent schreibt seine Arbeit in .github/upgrades/scenarios/dotnet-version-upgrade/ in Ihrem Repository. Wenn dieser Ordner bereits aus einem vorherigen Versuch vorhanden ist, fragt der Agent, ob der Vorgang fortgesetzt oder neu gestartet werden soll.

  4. Bitten Sie den Agent start , den Upgradevorgang zu starten.

Überprüfen der Bewertung

In der Bewertungsphase untersucht der Agent die Projektstruktur, Abhängigkeiten und Codemuster, um zu ermitteln, was geändert werden muss. Sie schreibt die Ergebnisse in assessment.md in .github/upgrades/scenarios/dotnet-version-upgrade/.

Wenn Copilot die Auswertung abgeschlossen hat, überprüfen Sie die Ausgabe der Konversation. Es beginnt in der Regel mit etwas Ähnlichem wie dem Folgenden:

Assessment Complete

I've analyzed the solution and created a full assessment — see .github/upgrades/scenarios/dotnet-version-upgrade/assessment.md.

Solution: MatchingGame.slnx → target: net10.0

Compatibility Statistics:

- Projects: 2 (both currently on net48, legacy project format)
- Issues: 100 (Mandatory: 91, Potential: 9, Optional: 0)
- Affected Files: 6
- Affected Technologies: WPF (61 issues), Legacy Configuration System (2 issues)

Projects:

| Project                                      | Current TFM | Type                  |
|----------------------------------------------|-------------|-----------------------|
| MatchingGame.Logic\MatchingGame.Logic.csproj | net48       | Classic Class Library |
| MatchingGame\MatchingGame.csproj             | net48       | Classic WPF           |

Key issues found:

- Both projects use legacy (non-SDK-style) project format → must be converted to SDK-style
- Both project target frameworks need to change to net10.0
- WPF project (MatchingGame.csproj) has binary/source/behavioral API incompatibilities and Legacy Configuration System usage

No security vulnerabilities were detected, and no NuGet packages are referenced — this is a self-contained WPF + library solution.
Proceeding to planning now. You can ask me to pause and switch to Guided mode at any time.

Überprüfen der Upgradeoptionen

Nach der Bewertung stellt der Agent Entscheidungen zur Upgradestrategie vor und speichert sie in upgrade-options.md in .github/upgrades/scenarios/dotnet-version-upgrade/. Für das Vergleichsspielbeispiel wählt der Agent die folgenden Optionen aus:

Aspect Entscheidung Grund
Upgrade-Strategie Unten-nach-oben. Der Agent aktualisiert zuerst MatchingGame.Logic , da MatchingGame davon abhängt, und überprüft dann jede Ebene, bevor sie fortfahren.
Projektansatz Direkt vor Ort. Beide Projekte migrieren zusammen, da keine anderen .NET Framework-Projekte sie nutzen.
Nicht unterstützte API-Behandlung Direkt inline korrigieren. Die meisten WPF API-Änderungen für .NET sind mechanisch und erfordern keinen separaten Planungsdurchlauf.
Windows systemeigenen APIs Windows Compatibility Pack. Die App verwendet die Windows-Registrierung und ist daher nur unter Windows verfügbar.
Nullable Referenztypen Deaktiviert lassen. Der Agent behandelt die Aktivierung von nullable nach der Migration als separaten Aufwand.

Der Agent ruft auch Risiken auf, die Ihre Aufmerksamkeit benötigen. Überprüfen Sie die vorgeschlagenen Optionen, und teilen Sie dem Agent mit, was Sie ändern möchten. Bitten Sie den Agent beispielsweise, nullable Verweistypen zu aktivieren oder zu ändern, wie inkompatible Pakete behandelt werden. Wenn Sie fertig sind, antworten Sie mit confirm, um die Auswahl zu bestätigen und mit der Planung fortzufahren.

Überprüfen des Plans

In der Planungsphase wandelt der Agent die Bewertung und Ihre bestätigten Optionen in eine detaillierte Spezifikation um. Es schreibt das Ergebnis in plan.md und erstellt eine scenario-instructions.md-Datei, in der Einstellungen, Entscheidungen und benutzerdefinierte Anweisungen für das Upgrade gespeichert werden.

Important

Wenn der Ablaufmodusautomatisch ist, startet der Agent die Ausführung des Plans ohne Zeit zur Überprüfung.

Der Plan umfasst Elemente wie die Reihenfolge der Upgrades über die Projekte hinweg, den Target Framework Moniker für jedes Projekt (net10.0-windows für WPF-Projekte), Pfade für Paketaktualisierungen und Risikominderungen für die bei der Bewertung festgestellten Breaking Changes.

So überprüfen und anpassen Sie den Plan:

  1. Öffnen plan.md in .github/upgrades/scenarios/dotnet-version-upgrade/.
  2. Überprüfen Sie die Upgradestrategien und Abhängigkeitsupdates.
  3. Bearbeiten Sie den Plan, um die Schritte anzupassen oder bei Bedarf Kontext hinzuzufügen.
  4. Weisen Sie den Agent an, zur Ausführungsphase zu wechseln.

Achtung

Der Plan hängt von projektübergreifenden Abhängigkeiten ab. Das Upgrade ist nicht erfolgreich, wenn Sie den Plan auf eine Weise ändern, die verhindert, dass der Upgradepfad abgeschlossen wird. Wenn "MatchingGame " beispielsweise von MatchingGame.Logic abhängt und Sie MatchingGame.Logic aus dem Plan entfernen, schlägt möglicherweise ein Upgrade von MatchingGame fehl.

Ausführen des Upgrades

In der Ausführungsphase unterbricht der Agent den Plan in sequenzielle, konkrete Aufgaben mit Überprüfungskriterien. Der Agent schreibt die Aufgabenliste in .github/upgrades/scenarios/dotnet-version-upgrade/tasks.md und verfolgt den gesamten Fortschritt in dieser Datei. Für jede Aufgabe erstellt der Agent unter .github/upgrades/scenarios/dotnet-version-upgrade/tasks/ einen Ordner, der eine Markdown-Datei enthält, die die Aufgabe beschreibt, sowie eine Markdown-Datei, die den Fortschritt der Aufgabe angibt.

Für das Beispiel „Matching Game“ umfasst die Aufgabenliste in der Regel zunächst die Aktualisierung von MatchingGame.Logic, dann von MatchingGame, das Wiederherstellen der Pakete, das Erstellen der Projektmappe und das Committen der Änderungen.

So führen Sie das Upgrade aus:

  1. Bitten Sie den Agent, das Upgrade zu starten.
  2. Verfolgen Sie den Fortschritt, indem Sie tasks.md prüfen, während der Agent den Aufgabenstatus aktualisiert. Öffnen Sie die aufgabenspezifischen Ordner unter tasks/, um die Aufgabenbeschreibung und einen detaillierten Fortschrittsbericht anzuzeigen.
  3. Wenn ein Problem auftritt, das vom Agent nicht behoben werden kann, stellen Sie die angeforderte Hilfe bereit. Beispielsweise kann der Agent Sie bitten, zwischen zwei Ersatz-APIs zu wählen oder zu bestätigen, ob ein veraltetes Paket beibehalten werden soll.
  4. Basierend auf Ihren Antworten passt der Agent seine Strategie an die verbleibenden Aufgaben an und setzt fort.

Der Agent führt die Änderungen gemäß der Git-Strategie durch, die Sie während der Vorinitialisierung konfiguriert haben: pro Aufgabe, pro Aufgabengruppe oder am Ende.

Hinweise für Visual Basic Projekte

Visual Basic-WPF-Projekte im .NET Framework verwenden häufig Einstellungsdateien und Erweiterungen wie System.Configuration, My, My.Computer und My.User. Die My Erweiterungen wurden in .NET entfernt. Der Agent erkennt diese Muster während der Bewertung und schlägt während der Ausführung Korrekturen vor. Möglicherweise müssen Sie jedoch einzelne Änderungen während eines geführten Laufs bestätigen.

Wenn der Agent das Projekt migriert, aber nicht kompiliert, überprüfen Sie, ob die Projektdatei auf Windows ausgerichtet ist und auf WPF verweist. Das <PropertyGroup> Element sollte wie der folgende Codeausschnitt aussehen:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net10.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <OutputType>WinExe</OutputType>
    <MyType>Windows</MyType>

    <!-- Other settings removed for brevity. -->
  </PropertyGroup>
</Project>

Überprüfen Sie die Aktualisierung

Nach Abschluss des Upgrades empfiehlt der Agent die nächsten Schritte in der Chatantwort. Fordern Sie den Agent auf, einen umfassenden Änderungsbericht mit "Erstellen eines Änderungsberichts" zu generieren.

Überprüfen Sie den endgültigen Vorgangsstatus, tasks.md und vergewissern Sie sich, dass jeder Schritt abgeschlossen ist.

So überprüfen Sie das Upgrade:

  1. Erstellen Sie die Lösung, und beheben Sie alle Kompilierungsfehler.
  2. Starten Sie die App und vergewissern Sie sich, dass Fenster und Ansichten wie erwartet geladen werden und sich wie erwartet verhalten. Überprüfen Sie alle visuellen oder verhaltensbedingten Unterschiede in XAML-Steuerelementen und benutzerdefinierten Steuerelementen zwischen .NET Framework und .NET.
  3. Führen Sie alle Komponententests in der Lösung aus, und beheben Sie Fehler.
  4. Vergewissern Sie sich, dass aktualisierte NuGet-Pakete mit Ihrer App kompatibel sind.
  5. Testen Sie die App sorgfältig, um zu überprüfen, ob das Upgrade erfolgreich war.

Tip

Wenn das Projekt nicht ausgeführt wird und kein Debugger angefügt werden kann, versuchen Sie, Visual Studio neu zu starten. Beim Migrieren von Projektdateien von .NET Framework zu .NET kann der WPF-Designer ohne Neustart möglicherweise verwirrt werden.

Das WPF Vergleichsspielbeispiel wird jetzt auf .NET 10 aktualisiert.

Erfahrung nach dem Upgrade

Wenn Sie die App von .NET Framework zu .NET portiert haben, finden Sie unter Modernisieren Ihrer aktualisierten .NET Framework-Apps Anregungen für die Einführung neuerer Muster wie appsettings.json Konfiguration, Abhängigkeitsinjektion oder Cloud-Dienste. Die Übernahme dieser Muster unterscheidet sich vom Upgrade auf .NET und ist nicht erforderlich, um das Upgrade abzuschließen.