Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird das Upgrade einer Windows Forms 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-Windows Forms-App aus einem Hauptprojekt und einer Klassenbibliothek.
Voraussetzungen
- Windows Betriebssystem.
- Visual Studio 2026.
- Laden Sie die demo-App herunter, die mit diesem Artikel verwendet wird, und extrahieren Sie sie.
- Das .NET SDK für die Version, auf die Sie abzielen. Dieser Artikel zielt auf .NET 10 ab.
- Ein Git-Repository für die Lösung. Der Agent setzt seinen Fortschritt fest, daher muss das Projekt unter Quellcodeverwaltung stehen.
- GitHub Copilot Modernisierung für Visual Studio aktiviert. Weitere Informationen finden Sie unter Installation von GitHub Copilot Modernisierung.
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 Projekte „Matching Game“ 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.
- Öffnen Sie die MatchingGame-Lösung in Visual Studio.
- Visual Studio zeigt das Dialogfeld "Zielframework nicht installiert" an.
- Wählen Sie "Ziel aktualisieren" auf .NET Framework 4.8 (Empfohlen) und dann "Weiter" aus.
- Öffnen Sie das Fenster Git Changes und übernehmen Sie die Retargeting-Änderungen per Commit.
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 darauf ausgelegt sind, sicherzustellen, dass C#-Projekte zuverlässig aktualisiert werden können, und diese Leitplanken beeinträchtigen 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.
- Upgrade-Assistent: 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 aufgeführten Alternativen.
Wenn Sie den Standard-Copilot-Agent verwenden oder manuell aktualisieren, führen Sie die folgenden Schritte aus:
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, dies zu tun, wenn Sie die Projektmappe öffnen, oder Sie können es in den Projekteigenschaften ändern.
Aktualisieren Sie alle veralteten NuGet-Pakete auf ihre neuesten kompatiblen Versionen.
Erstellen Sie ein neues VB-Windows Forms Projekt mit einer Visual Studio Vorlage oder
dotnet new winforms -lang vb. Die Vorlage erstellt eine Projektdatei und Einstellungen im SDK-Stil, die sich von denen in .NET Framework unterscheiden.Kopieren Sie Die
.vbQuelldateien aus dem alten Projektordner in den neuen Projektordner.Kopieren Sie alle Dateien, die keinen Code enthalten und von denen das Projekt abhängt, wie z. B.
app.config,.settings-Dateien, Bilder, Symbole und andere eingebettete Ressourcen.Öffnen Sie die alte Projektdatei (oder
packages.config) und notieren Sie sich jeden NuGet-Paketverweis. Fügen Sie dem neuen Projekt dieselben Pakete mithilfe des NuGet-Paket-Managers oderdotnet add package <name>hinzu.Falls das Projekt auf andere Projekte in der Lösung verweist, fügen Sie diese Verweise im neuen Projekt erneut hinzu.
Versuchen Sie, die Lösung zu erstellen. Beheben Sie noch keine Fehler – die Build-Ausgabe gibt Copilot eine konkrete Liste von Problemen, anhand derer es arbeiten kann.
Checken Sie den aktuellen Stand in die Versionsverwaltung ein, damit Sie eine saubere Ausgangsbasis haben, bevor Copilot Änderungen vornimmt.
Öffnen Sie GitHub Copilot Chat, und bitten Sie ihn, die verbleibenden Probleme zu beheben. Beispiel:
Dieses Visual Basic Windows Forms 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.
Überprüfen Sie die Änderungen, die Copilot vorschlägt, und erstellen Sie dann das Projekt 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.
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.
Wählen Sie ein Modell mit starken Logik- und Codierungsfunktionen aus.
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.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 summary:
• Target: net48 → net10.0
• Projects: 2
• MatchingGame.Logic (Class Library)
• MatchingGame (Windows Forms)
• Issues: 883 (673 mandatory, 210 potential)
• Affected Technologies: Windows Forms (666), GDI+ / System.Drawing (208), Legacy Configuration System (2)
Key concerns:
• Both projects are legacy-format .csproj files — need conversion to SDK-style
• MatchingGame.csproj has API incompatibilities (binary + source) and an incompatible NuGet package
• WinForms remains supported on .NET 10 (Windows-only TFM)
• No reported security vulnerabilities
Aufschlüsselung der Bewertung
Copilot öffnet die .github/upgrades/scenarios/dotnet-version-upgrade/assessment.md Datei im Visual Studio-Editor. Scrollen Sie nach unten zum Abschnitt MatchingGame\MatchingGame.csproj, um eine Tabelle der Probleme zu sehen:
Technologie Probleme Prozentsatz Migrationspfad Legacykonfigurationssystem 2 0.2% Legacy-XML-basiertes Konfigurationssystem (app.config/web.config), das durch ein flexibleres Konfigurationsmodell in .NET Core ersetzt wurde. Das alte System war starr und XML-basiert. Migrieren sie zu Microsoft. Extensions.Configuration mit JSON/Umgebungsvariablen; verwenden Sie das NuGet-Paket "System.Configuration.ConfigurationManager" bei Bedarf als Zwischenbrücke. GDI+ / System.Drawing 208 23.7% System.Drawing-APIs für 2D-Grafiken, Bildverarbeitung und Druckvorgänge, die über nuGet package System.Drawing.Common verfügbar sind. Hinweis: Für Serverszenarien aufgrund von Windows Abhängigkeiten nicht empfohlen; erwägen Sie plattformübergreifende Alternativen wie SkiaSharp oder ImageSharp für neuen Code. Windows Forms 621 76.0% Windows Forms APIs zum Erstellen Windows Desktopanwendungen mit herkömmlicher formularbasierter Benutzeroberfläche, die in .NET auf Windows verfügbar sind. Aktivieren sie Windows Forms Unterstützung: Option 1 (Empfohlen): Target net10.0-windows; Option 2: Hinzufügen <UseWindowsForms>true</UseWindowsForms>; Option 3 (Legacy): Verwenden Sie Microsoft.NET. Sdk.WindowsDesktop SDK.
Die meisten dieser Probleme sind keine echten Probleme. Sehen Sie sich die Spalte "Migrationspfad" für die Zeile GDI+ an, in der 208 Probleme aufgeführt sind. Die Bewertung kennzeichnet diese APIs, da sie in .NET Framework, aber nicht in .NET verfügbar sind. In der Spalte wird der Fix erläutert: Fügen Sie das System.Drawing.Common NuGet-Paket hinzu, um die APIs wiederherzustellen.
In der Zeile Windows Forms werden 621 API-Probleme aus demselben Grund aufgelistet. Windows Forms APIs sind standardmäßig nicht in .NET verfügbar, sie werden jedoch wiederhergestellt, indem Sie auf ein Windows spezifisches Framework wie net10.0-windows und die Einstellung <UseWindowsForms>true</UseWindowsForms> in der Projektdatei abzielen.
Die Option 3 schlägt eine falsche Option vor. Ältere Versionen von .NET erforderten ein Windows Forms Projekt, das speziell auf das Microsoft.NET.Sdk.WindowsDesktop SDK ausgerichtet ist, aber jetzt wird automatisch darauf verwiesen, wenn <UseWindowsForms>true</UseWindowsForms> festgelegt wird.
Tip
Wenn Sie mehr über eine Option erfahren möchten, fragen Sie Copilot nach weiteren Informationen und Kontext.
Ü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 werden gemeinsam migriert, da keine anderen .NET Framework-Projekte sie verwenden. |
| Nicht unterstützte Pakete | Direkt auflösen. | Die Bewertung ergab nur wenige inkompatible Pakete, daher sucht der Agent während der Ausführung nach Ersatz. |
| Nicht unterstützte API-Behandlung | Direkt inline korrigieren. | Die meisten Windows Forms- und GDI+-API-Änderungen für .NET sind mechanisch und erfordern keinen separaten Planungsdurchlauf. |
| Windows systemeigenen APIs | Windows Compatibility Pack. | Die App verwendet Windows Forms und GDI+ intensiv und ist von Natur aus ausschließlich für Windows. |
| Nullable Referenztypen | Deaktiviert lassen. | Der Agent betrachtet die Aktivierung von Nullable nach der Migration als separaten Aufwand. |
Der Agent ruft auch Risiken auf, die Ihre Aufmerksamkeit benötigen. Für das Vergleichsspielbeispiel kennzeichnet der Agent die MetroFramework Pakete, da sie nur für .NET Framework verfügbar sind. Das wahrscheinliche Ergebnis ist das Entfernen MetroFramework und Zurückfallen auf standardmäßige Windows Forms Steuerelemente, die den visuellen Stil der App ändern.
Überprüfen Sie die vorgeschlagenen Optionen, und teilen Sie dem Agent mit, was Sie ändern möchten. Weisen Sie den Agenten zum Beispiel an, nullfähige Verweistypen zu aktivieren oder zunächst die Ersetzungen MetroFramework zu pausieren und zu besprechen. Wenn Sie fertig sind, antworten Sie mit confirm, um die Auswahl zu bestätigen und zur Planung zu wechseln.
Ü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 Datei scenario-instructions.md, die Einstellungen, Entscheidungen und benutzerdefinierte Anweisungen für das Upgrade speichert.
Important
Wenn der Ablaufmodusautomatisch ist, startet der Agent die Ausführung des Plans ohne Zeit zur Überprüfung.
Der Plan umfasst Punkte wie die Reihenfolge der Upgrades über die Projekte hinweg, den Target-Framework-Moniker für jedes Projekt (net10.0-windows für Windows-Forms-Projekte), Pfade für Paketaktualisierungen und Maßnahmen zur Risikominderung für die bei der Bewertung festgestellten Breaking Changes.
So überprüfen und anpassen Sie den Plan:
- Öffnen
plan.mdin.github/upgrades/scenarios/dotnet-version-upgrade/. - Überprüfen Sie die Upgradestrategien und Abhängigkeitsupdates.
- Bearbeiten Sie den Plan, um die Schritte anzupassen oder bei Bedarf Kontext hinzuzufügen.
- 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 dokumentiert.
Für das Matching-Game-Beispiel 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:
- Bitten Sie den Agent, das Upgrade zu starten.
- Verfolgen Sie den Fortschritt, indem Sie
tasks.mdprüfen, während der Agent den Aufgabenstatus aktualisiert. Öffnen Sie die aufgabenspezifischen Ordner untertasks/für die Aufgabenbeschreibung und einen detaillierten Fortschrittsbericht. - 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.
- Basierend auf Ihren Antworten passt der Agent seine Strategie an die verbleibenden Aufgaben an und setzt fort.
Der Agent erstellt Commits für Änderungen gemäß der Git-Strategie, die Sie bei der Vorinitialisierung konfiguriert haben: pro Aufgabe, pro Aufgabengruppe oder am Ende.
Hinweise für Visual Basic Projekte
Visual-Basic-Windows-Forms-Projekte im .NET Framework verwenden häufig System.Configuration-Einstellungsdateien und My-Erweiterungen wie 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 verweisen Sie auf Windows Forms. Das <PropertyGroup> Element sollte wie der folgende Codeausschnitt aussehen:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net10.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<OutputType>WinExe</OutputType>
<MyType>WindowsForms</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:
Erstellen Sie die Lösung, und beheben Sie alle Kompilierungsfehler.
Starten Sie die App, und bestätigen Sie, dass die Formulare wie erwartet geladen werden und sich wie erwartet verhalten.
Die Standardschriftart in Windows Forms hat sich zwischen .NET Framework und .NET geändert. Prüfen Sie daher Formulare und benutzerdefinierte Steuerelemente auf Layoutunterschiede.
Führen Sie alle Komponententests in der Lösung aus, und beheben Sie Fehler.
Vergewissern Sie sich, dass aktualisierte NuGet-Pakete mit Ihrer App kompatibel sind.
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. Die Migration von Projektdateien von .NET Framework zu .NET kann den Windows Forms-Designer ohne Neustart möglicherweise verwirren.
Das Windows Forms Vergleichsspielbeispiel wird jetzt auf .NET 10 aktualisiert.
Erfahrung nach dem Upgrade
Wenn Sie die App von .NET Framework zu .NET portiert haben, überprüfen Sie "Modernize" nach dem Upgrade auf .NET von .NET Framework, um Ideen zur Einführung neuerer Muster wie appsettings.json Konfiguration, Abhängigkeitseinfügung oder Clouddienste zu erhalten. Die Übernahme dieser Muster unterscheidet sich vom Upgrade auf .NET und ist nicht erforderlich, um das Upgrade abzuschließen.
Verwandte Inhalte
.NET Desktop feedback