Een Windows Forms-app upgraden naar .NET met GitHub Copilot modernisering

In dit artikel wordt uitgelegd hoe u een Windows Forms desktop-app bijwerken naar .NET met behulp van de GitHub Copilot moderniseringsagent. De agent draait in je editor, analyseert het project en stuurt een workflow in drie fasen aan: beoordeling, planning en uitvoering.

In het voorbeeld wordt het matching game-voorbeeld gebruikt, een kleine .NET Framework Windows Forms app die bestaat uit een hoofdproject en een klassebibliotheek.

Prerequisites

Tip

Zorg ervoor dat u een back-up van uw code hebt, zoals in broncodebeheer of een kopie, voordat u begint.

De oplossing openen

De Matching Game-projecten zijn gericht op .NET Framework 4.5. Wanneer u de oplossing opent, vraagt Visual Studio u de projecten opnieuw te richten op een ondersteunde versie van het .NET Framework.

  1. Open de MatchingGame-oplossing in Visual Studio.
  2. Visual Studio geeft het dialoogvenster Target Framework Niet geïnstalleerd weer.
  3. Selecteer Het doel bijwerken naar .NET Framework 4.8 (aanbevolen) en selecteer vervolgens Doorgaan.
  4. Open het venster Git Changes en dien de retargetingwijzigingen in.

Belangrijke opmerkingen voor Visual Basic

De GitHub Copilot moderniseringsagent biedt geen volledige ondersteuning voor Visual Basic .NET projecten. De agent bevat kaders die speciaal zijn ontworpen om ervoor te zorgen dat C#-projecten betrouwbaar worden bijgewerkt en deze kaders interfereren met VB-projectanalyse en -uitvoering. Als uw oplossing VB-projecten bevat, gebruikt u in plaats daarvan een van de volgende alternatieven:

  • GitHub Copilot (standaardagent):gebruik de reguliere Copilot-agent, zonder de moderniseringsagent, om de upgrade interactief te begeleiden.
  • Upgradeassistent: een speciaal hulpprogramma voor migratie met VB-ondersteuning.

Tip

Als uw oplossing zowel C#- als VB-projecten bevat, kunt u nog steeds de moderniseringsagent voor de C#-projecten gebruiken. Werk de VB-projecten afzonderlijk bij met behulp van een van de vermelde alternatieven.

Als u de standaard-Copilot-agent gebruikt of handmatig upgradet, volg dan deze stappen:

  1. Als het project is gericht op een niet-ondersteunde versie van .NET Framework, moet u het eerst opnieuw instellen op .NET Framework 4.8. Visual Studio wordt u gevraagd dit te doen wanneer u de oplossing opent of kunt u deze wijzigen in de projecteigenschappen.

  2. Werk verouderde NuGet-pakketten bij naar de nieuwste compatibele versies.

  3. Maak een nieuw VB-Windows Forms-project met behulp van een Visual Studio-sjabloon of dotnet new winforms -lang vb. De sjabloon produceert een SDK-projectbestand en -instellingen, die zijn gewijzigd van .NET Framework.

  4. Kopieer de .vb bronbestanden uit de oude projectmap naar de nieuwe projectmap.

  5. Kopieer eventuele niet-codebestanden waarvoor het project is gebaseerd, zoals app.config.settings bestanden, afbeeldingen, pictogrammen en andere ingesloten resources.

  6. Open het oude projectbestand (of packages.config) en noteer elke NuGet-pakketreferentie. Voeg dezelfde pakketten toe aan het nieuwe project met behulp van de NuGet-Pakketbeheer of dotnet add package <name>.

  7. Als het project verwijst naar andere projecten in de oplossing, voegt u deze verwijzingen opnieuw toe aan het nieuwe project.

  8. Probeer de oplossing te bouwen. Los nog geen fouten op. De build-uitvoer geeft Copilot een concrete lijst met problemen waaruit kan worden gewerkt.

  9. Voer de huidige status door naar broncodebeheer, zodat u een schone basislijn hebt voordat Copilot wijzigingen aanbrengt.

  10. Open GitHub Copilot Chat en vraag het om de resterende problemen op te lossen. Voorbeeld:

    Dit Visual Basic Windows Forms project is gemigreerd van .NET Framework 4.8 naar .NET 10. Het projectbestand en de bronbestanden zijn aanwezig, maar de oplossing compileert niet. Bekijk de buildfouten en los API-incompatibiliteit, ontbrekende verwijzingen en eventuele configuratiemigratieproblemen op.

  11. Bekijk de wijzigingen Copilot voorstelt en bouw het project vervolgens opnieuw en test het.

De upgrade starten

De oplossing Matching Game bevat de MatchingGame-app en de klassebibliotheek MatchingGame.Logic . De agent bepaalt zelf de projectgrafiek, dus start de upgrade op oplossingsniveau.

  1. Klik in Solution Explorer met de rechtermuisknop op de oplossing en selecteer Moderniseren.

    Het Venster GitHub Copilot Chat wordt geopend en start een gesprek met de moderniseringsagent.

  2. Selecteer een model met sterke redenerings- en coderingsmogelijkheden.

  3. Vertel de agent wat u wilt doen. Voorbeeld:

    Upgrade alles naar .NET 10.

    De agent rapporteert de huidige status van de codebasis en wat er moet worden uitgevoerd:

    • Target Framework: Geeft aan dat de agent de projecten bijwerkt naar .NET 10.
    • Stroommodus: standaard ingesteld op Automatisch. Voor complexe apps vraagt u de agent om over te schakelen naar de begeleide modus.
    • Broncodebeheer: Geeft aan dat de agent een nieuwe werkbranch maakt.

    De agent schrijft het werk naar .github/upgrades/scenarios/dotnet-version-upgrade/ in uw opslagplaats. Als die map al bestaat uit een eerdere poging, vraagt de agent of deze moet doorgaan of opnieuw moet worden gestart.

  4. Vraag de agent start om het upgradeproces te starten.

De evaluatie beoordelen

In de evaluatiefase onderzoekt de agent de projectstructuur, afhankelijkheden en codepatronen om te bepalen wat er moet worden gewijzigd. De resultaten worden naar assessment.md weggeschreven in .github/upgrades/scenarios/dotnet-version-upgrade/.

Wanneer Copilot klaar is met de beoordeling, bekijk dan de uitvoer van de conversatie. Over het algemeen begint het met iets vergelijkbaars met het volgende:

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

Uitsplitsing van de evaluatie

Copilot opent het .github/upgrades/scenarios/dotnet-version-upgrade/assessment.md bestand in de Visual Studio-editor. Schuif omlaag naar de MatchingGame\MatchingGame.csproj sectie om een tabel met problemen weer te geven:

Technologie Issues Procent Migratiepad
Verouderd configuratiesysteem 2 0.2% Verouderd configuratiesysteem op basis van XML (app.config/web.config) dat is vervangen door een flexibeler configuratiemodel in .NET Core. Het oude systeem was stijf en xml-gebaseerd. Migreren naar Microsoft. Extensions.Configuration met JSON/omgevingsvariabelen; gebruik het NuGet-pakket System.Configuration.ConfigurationManager als tussentijdse brug, indien nodig.
GDI+ / System.Drawing 208 23.7% System.Drawing-API's voor 2D-afbeeldingen, imaging en afdrukken die beschikbaar zijn via NuGet-pakket System.Drawing.Common. Opmerking: Niet aanbevolen voor serverscenario's vanwege Windows afhankelijkheden; overweeg platformoverschrijdende alternatieven, zoals SkiaSharp of ImageSharp voor nieuwe code.
Windows Forms 621 76.0% Windows Forms API's voor het bouwen van Windows bureaubladtoepassingen met een traditionele gebruikersinterface op basis van formulieren die beschikbaar zijn in .NET op Windows. Schakel Windows Forms ondersteuning in: optie 1 (aanbevolen): target net10.0-windows; Optie 2: Toevoegen<UseWindowsForms>true</UseWindowsForms>; Optie 3 (verouderd): gebruik Microsoft.NET. Sdk.WindowsDesktop SDK.

De meeste van deze problemen zijn geen echte problemen. Bekijk de kolom Migratiepad voor de GDI+ -rij met 208 problemen. De evaluatie markeert deze API's omdat ze beschikbaar zijn in .NET Framework, maar niet in .NET. In de kolom wordt de oplossing uitgelegd: voeg het System.Drawing.Common NuGet-pakket toe om de API's te herstellen.

De Windows Forms rij bevat 621 API-problemen om dezelfde reden. Windows Forms API's zijn standaard niet beschikbaar in .NET, maar u herstelt ze door een Windows-specifiek framework zoals net10.0-windows en de instelling <UseWindowsForms>true</UseWindowsForms> in het projectbestand te richten. Met optie 3 wordt een onjuiste optie voorgesteld. Oudere versies van .NET vereisten dat een Windows Forms-project specifiek op de Microsoft.NET.Sdk.WindowsDesktop SDK was gericht, maar nu wordt er automatisch naar verwezen wanneer <UseWindowsForms>true</UseWindowsForms> is ingesteld.

Tip

Als u meer wilt weten over een optie, vraagt u Copilot voor meer informatie en context.

Bekijk de upgradeopties

Na de beoordeling presenteert de agent beslissingen over de upgradestrategie en slaat deze op in upgrade-options.md in .github/upgrades/scenarios/dotnet-version-upgrade/. Voor het voorbeeldspel Matchen selecteert de agent de volgende opties:

Aspect Beslissing Reden
Upgradestrategie Onderin. De agent voert eerst een upgrade uit van MatchingGame.Logic omdat MatchingGame ervan afhankelijk is en valideert vervolgens elke laag voordat u verdergaat.
Project benadering Ter plaatse. Beide projecten worden samen gemigreerd omdat er geen andere .NET Framework-projecten deze gebruiken.
Niet-ondersteunde pakketten Inline oplossen. De beoordeling bracht slechts enkele incompatibele pakketten aan het licht, dus de agent onderzoekt tijdens zijn werk alternatieven.
Niet-ondersteunde API-verwerking Los inline op. De meeste Windows Forms- en GDI+ API-wijzigingen voor .NET zijn mechanisch en vereisen geen afzonderlijke planningspas.
Windows-systeemeigen API's Windows compatibiliteitspakket. De app maakt intensief gebruik van Windows Forms en GDI+ en is inherent Windows-only.
Nullable referentietypen Uitgeschakeld laten. De agent behandelt het inschakelen van nullable als een afzonderlijke inspanning na de migratie.

De agent noemt ook risico's die uw aandacht nodig hebben. Voor het overeenkomende gamevoorbeeld markeert de agent de MetroFramework pakketten omdat ze alleen beschikbaar zijn voor .NET Framework. Het waarschijnlijke resultaat is het verwijderen MetroFramework en terugvallen op standaardbesturingselementen Windows Forms, waardoor de visuele stijl van de app wordt gewijzigd.

Bekijk de voorgestelde opties en vertel de agent wat u wilt wijzigen. Vraag de agent bijvoorbeeld om nullable referentietypen in te schakelen of eerst te pauzeren en de vervangingen voor MetroFramework te bespreken. Wanneer u klaar bent, antwoordt u confirm om de selecties vast te leggen en door te gaan naar de planning.

Het plan controleren

In de planningsfase converteert de agent de evaluatie en de bevestigde opties naar een gedetailleerde specificatie. Het schrijft het resultaat naar plan.md en maakt een scenario-instructions.md bestand waarin voorkeuren, beslissingen en aangepaste instructies voor de upgrade worden opgeslagen.

Important

Als de stroommodusautomatisch is, start de agent het plan zonder tijd om het te controleren.

Het plan behandelt items zoals de upgradevolgorde voor projecten, de doelframework-moniker voor elk project (net10.0-windowsvoor Windows Forms projecten), pakketupdatepaden en risicobeperking voor de belangrijke wijzigingen die de evaluatie heeft gevonden.

Het plan controleren en aanpassen:

  1. Open plan.md in .github/upgrades/scenarios/dotnet-version-upgrade/.
  2. Bekijk de upgradestrategieën en afhankelijkheidsupdates.
  3. Bewerk het plan om de stappen aan te passen of voeg indien nodig context toe.
  4. Laat de agent naar de uitvoeringsfase gaan.

Caution

Het plan is afhankelijk van projectafhankelijkheden. De upgrade slaagt niet als u het plan zodanig wijzigt dat het upgradepad niet kan worden voltooid. Als MatchingGame bijvoorbeeld afhankelijk is van MatchingGame.Logic en u MatchingGame.Logic verwijdert uit het plan, kan het upgraden van MatchingGame mislukken.

De upgrade uitvoeren

In de uitvoeringsfase breekt de agent het plan af in opeenvolgende, concrete taken met validatiecriteria. De agent schrijft de takenlijst naar .github/upgrades/scenarios/dotnet-version-upgrade/tasks.md en houdt de algehele voortgang in dat bestand bij. Voor elke taak maakt de agent een map onder .github/upgrades/scenarios/dotnet-version-upgrade/tasks/ die een Markdown-bestand bevat met een beschrijving van de taak en een Markdown-bestand waarin de voortgang van de taak wordt gerapporteerd.

Voor het voorbeeld van het overeenkomende spel bevat de takenlijst meestal eerst een upgrade van MatchingGame.Logic , vervolgens MatchingGame, het herstellen van pakketten, het bouwen van de oplossing en het doorvoeren van de wijzigingen.

De upgrade uitvoeren:

  1. Vraag de agent om de upgrade te starten.
  2. Controleer de voortgang door tasks.md te bekijken terwijl de agent taakstatussen bijwerkt. Open de mappen per taak onder tasks/ voor de taakbeschrijving en een gedetailleerd voortgangsrapport.
  3. Als de agent een probleem tegenkomt dat het niet kan oplossen, bied dan de gevraagde hulp. De agent kan u bijvoorbeeld vragen om te kiezen tussen twee vervangende API's of om te bevestigen of u een afgeschaft pakket wilt behouden.
  4. Op basis van uw antwoorden past de agent zijn strategie aan de resterende taken aan en gaat door.

De agent voert wijzigingen door volgens de Git-strategie die u tijdens de pre-initialisatie hebt geconfigureerd: per taak, per groep taken of aan het einde.

Notities voor Visual Basic projecten

Visual Basic Windows Forms projecten in .NET Framework gebruiken System.Configuration vaak instellingenbestanden en My -extensies, zoals My.Computer enMy.User. De My extensies zijn verwijderd in .NET. De agent markeert deze patronen tijdens de evaluatie en stelt oplossingen voor tijdens de uitvoering, maar mogelijk moet u afzonderlijke wijzigingen bevestigen tijdens een begeleide uitvoering.

Als de agent het project migreert, maar niet compileert, controleert u of het projectbestand is gericht op Windows en verwijst naar Windows Forms. Het <PropertyGroup> element moet eruitzien als het volgende fragment:

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

De upgrade controleren

Wanneer de upgrade is voltooid, raadt de agent de volgende stappen in het chatantwoord aan. Vraag de agent om een uitgebreid wijzigingsrapport te genereren met 'Een wijzigingsrapport genereren'.

Controleer de uiteindelijke taakstatus in tasks.md en controleer of elke stap is voltooid.

De upgrade controleren:

  1. Bouw de oplossing en los eventuele compilatiefouten op.

  2. Voer de app uit en controleer of formulieren worden geladen en werken zoals verwacht.

    Het standaardlettertype in Windows Forms is veranderd tussen .NET Framework en .NET, dus controleer formulieren en aangepaste besturingselementen op verschillen in indeling.

  3. Voer moduletests uit in de oplossing en los fouten op.

  4. Controleer of bijgewerkte NuGet-pakketten compatibel zijn met uw app.

  5. Test de app grondig om te controleren of de upgrade is voltooid.

Tip

Als het project niet wordt uitgevoerd en er geen foutopsporingsprogramma kan worden gekoppeld, start u Visual Studio opnieuw op. Het migreren van projectbestanden van .NET Framework naar .NET kan de Windows Forms ontwerper verwarren zonder opnieuw op te starten.

De Windows Forms Matching Game Sample is nu geüpgraded naar .NET 10.

Ervaring na de upgrade

Als u de app hebt overgezet van .NET Framework naar .NET, controleert u Moderniseren na een upgrade naar .NET vanuit .NET Framework voor ideeën over het toepassen van nieuwere patronen, zoals appsettings.json configuratie, afhankelijkheidsinjectie of cloudservices. Het aannemen van deze patronen is gescheiden van een upgrade naar .NET en is niet vereist om de upgrade te voltooien.