Delen via


Overzicht van het overzetten van .NET Framework naar .NET

Dit artikel bevat een overzicht van wat u moet overwegen bij het overzetten van uw code van .NET Framework naar .NET (voorheen .NET Core). Het overzetten naar .NET vanuit .NET Framework is relatief eenvoudig voor veel projecten. De complexiteit van uw projecten bepaalt hoeveel werk u moet doen na de eerste upgrade van de projectbestanden.

Projecten waarin het app-model beschikbaar is in .NET, zoals bibliotheken, console-apps en bureaublad-apps, vereisen meestal weinig wijzigingen. Voor projecten waarvoor een nieuw app-model is vereist, zoals overstappen op ASP.NET Core vanuit ASP.NET, is meer werk vereist. Veel patronen van het oude app-model hebben equivalenten die tijdens de conversie kunnen worden gebruikt.

Windows-bureaubladtechnologieën

Veel toepassingen die zijn gemaakt voor .NET Framework gebruiken een bureaubladtechnologie zoals Windows Forms of Windows Presentation Foundation (WPF). Zowel Windows Forms als WPF zijn beschikbaar in .NET, maar ze blijven alleen windows-technologieën.

Houd rekening met de volgende afhankelijkheden voordat u een upgrade uitvoert van een Windows Forms- of WPF-toepassing:

  • Projectbestanden voor .NET gebruiken een andere indeling dan .NET Framework.
  • Uw project gebruikt mogelijk een API die niet beschikbaar is in .NET.
  • Besturingselementen en bibliotheken van derden zijn mogelijk niet overgezet naar .NET en blijven alleen beschikbaar voor .NET Framework.
  • Uw project maakt gebruik van een technologie die niet meer beschikbaar is in .NET.

.NET maakt gebruik van de opensource-versies van Windows Forms en WPF en bevat verbeteringen ten opzichte van .NET Framework.

Zie een van de volgende artikelen voor zelfstudies over het upgraden van uw bureaubladtoepassing naar .NET:

Windows-specifieke API's

Toepassingen kunnen nog steeds P/Aanroepen van systeemeigen bibliotheken op platforms die worden ondersteund door .NET. Deze technologie is niet beperkt tot Windows. Als de bibliotheek waarnaar u verwijst echter Windows-specifiek is, zoals een user32.dll of kernel32.dll, werkt de code alleen in Windows. Voor elk platform waarop u uw app wilt laten uitvoeren, moet u platformspecifieke versies vinden of uw code algemeen genoeg maken om op alle platforms te kunnen worden uitgevoerd.

Wanneer u een toepassing van .NET Framework overdrat naar .NET, heeft uw toepassing waarschijnlijk een bibliotheek van .NET Framework gebruikt. Veel API's die beschikbaar waren in .NET Framework, werden niet overgezet naar .NET omdat ze afhankelijk waren van Windows-specifieke technologie, zoals het Windows-register of het GDI+-tekenmodel.

Het Windows-compatibiliteitspakket biedt een groot deel van het .NET Framework API-oppervlak aan .NET en wordt geleverd via het Microsoft.Windows.Compatibility NuGet-pakket.

Zie Het Windows-compatibiliteitspakket gebruiken voor poortcode naar .NET voor meer informatie.

.NET Framework-compatibiliteitsmodus

De .NET Framework-compatibiliteitsmodus is geïntroduceerd in .NET Standard 2.0. Met de compatibiliteitsmodus kunnen .NET Standard- en .NET-projecten verwijzen naar .NET Framework-bibliotheken alsof ze zijn gecompileerd voor het doelframework van het project. Sommige .NET-implementaties ondersteunen echter mogelijk een groter segment van .NET Framework dan andere. .NET Core 3.0 breidt bijvoorbeeld de .NET Framework-compatibiliteitsmodus uit naar Windows Forms en WPF. Verwijzingen naar .NET Framework-bibliotheken werken niet voor alle projecten, bijvoorbeeld wanneer de bibliotheek WPF-API's gebruikt, maar het maakt wel veel porteer-scenario's mogelijk. Zie Analyze your dependencies to port code from .NET Framework to .NET (Uw afhankelijkheden analyseren naar poortcode van .NET Framework naar .NET) voor meer informatie.

Het verwijzen naar .NET Framework-bibliotheken werkt niet in alle gevallen, omdat het afhankelijk is van welke .NET Framework-API's zijn gebruikt en of deze API's wel of niet worden ondersteund door het doelframework van het project. Sommige .NET Framework-API's werken ook alleen in Windows. De .NET Framework-compatibiliteitsmodus blokkeert veel poortscenario's, maar u moet uw projecten testen om ervoor te zorgen dat ze ook tijdens runtime werken. Raadpleeg Analyseer uw afhankelijkheden voor het porteren van code van .NET Framework naar voor meer informatie.

Wijzigingen in het doelframework in SDK-projecten

Zoals eerder vermeld, gebruiken de projectbestanden voor .NET een andere indeling dan .NET Framework, ook wel de SDK-projectindeling genoemd. Zelfs als u niet overstapt van .NET Framework naar .NET, moet u het projectbestand nog steeds upgraden naar de nieuwste indeling. De manier om een doelframework op te geven is anders in SDK-projecten. In .NET Framework wordt de <TargetFrameworkVersion> eigenschap gebruikt met een moniker waarmee de versie van .NET Framework wordt opgegeven. .NET Framework 4.7.2 ziet er bijvoorbeeld als volgt uit:

<PropertyGroup>
  <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
</PropertyGroup>

Een SDK-project maakt gebruik van een andere eigenschap om het doelframework, de <TargetFramework> eigenschap, te identificeren. Wanneer u zich richt op .NET Framework, begint de moniker met net en eindigt deze met de versie van .NET Framework zonder perioden. Bijvoorbeeld, de moniker om .NET Framework 4.7.2 te targeten is net472.

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>

Zie Doelframeworks in SDK-stijl projecten voor een volledige lijst van alle doelmonikers.

Niet-beschikbare technologieën

Er zijn enkele technologieën in .NET Framework die niet bestaan in .NET:

  • Toepassingsdomeinen

    Het maken van andere toepassingsdomeinen wordt niet ondersteund. Gebruik voor code-isolatie afzonderlijke processen of containers als alternatief.

  • Externe toegang

    "Remoting wordt gebruikt voor communicatie tussen applicatiedomeinen, welke niet langer worden ondersteund." Voor eenvoudige communicatie tussen processen kunt u inter-process communication (IPC) mechanismen overwegen als alternatief voor het gebruik van 'remoting', zoals de System.IO.Pipes klasse of de MemoryMappedFile klasse. Voor complexere scenario's kunt u frameworks zoals StreamJsonRpc of ASP.NET Core overwegen (met behulp van gRPC - of RESTful-web-API-services).

    Omdat remoting niet wordt ondersteund, werpen aanroepen naar BeginInvoke() en EndInvoke() op gedelegeerde objecten een PlatformNotSupportedException-uitzondering.

  • Beveiliging van codetoegang (CAS)

    CAS was een sandbox-techniek die wordt ondersteund door .NET Framework, maar afgeschaft in .NET Framework 4.0. Het is vervangen door beveiligingstransparantie en wordt niet ondersteund in .NET. Gebruik in plaats daarvan beveiligingsgrenzen die worden geleverd door het besturingssysteem, zoals virtualisatie, containers of gebruikersaccounts.

  • Transparantie van beveiliging

    Net als bij CAS wordt de techniek voor beveiligingstransparantie sandboxing niet meer aanbevolen voor .NET Framework-toepassingen en wordt deze niet ondersteund in .NET. Gebruik in plaats daarvan beveiligingsgrenzen die worden geleverd door het besturingssysteem, zoals virtualisatie, containers of gebruikersaccounts.

  • System.EnterpriseServices

    System.EnterpriseServices (COM+) wordt niet ondersteund in .NET.

  • Windows Workflow Foundation (WF)

    WF wordt niet ondersteund in .NET. Zie CoreWF voor een alternatief.

Zie .NET Framework-technologieën die niet beschikbaar zijn op .NET 6+ voor meer informatie over deze niet-ondersteunde technologieën.

Platformoverschrijdend

.NET (voorheen bekend als .NET Core) is ontworpen om platformoverschrijdend te zijn. Als uw code niet afhankelijk is van Windows-specifieke technologieën, kan deze worden uitgevoerd op andere platforms, zoals macOS, Linux en Android. Dergelijke code omvat projecttypen zoals:

  • Libraries
  • Op console gebaseerde hulpprogramma's
  • Automation
  • ASP.NET sites

.NET Framework is een windows-onderdeel. Wanneer uw code gebruikmaakt van Windows-specifieke technologieën of API's, zoals Windows Forms en WPF, kan de code nog steeds worden uitgevoerd op .NET, maar deze wordt niet uitgevoerd op andere besturingssystemen.

Het is mogelijk dat uw bibliotheek of consoletoepassing op meerdere platforms kan worden gebruikt zonder veel te veranderen. Wanneer u overdrat naar .NET, kunt u dit overwegen en uw toepassing testen op andere platforms.

De toekomst van .NET Standard

.NET Standard is een formele specificatie van .NET API's die beschikbaar zijn voor meerdere .NET-implementaties. De motivatie achter .NET Standard was om meer uniformiteit in het .NET-ecosysteem tot stand te brengen. Vanaf .NET 5 is er een andere benadering voor het vaststellen van uniformiteit aangenomen. Deze nieuwe benadering elimineert de noodzaak voor .NET Standard in veel scenario's. Zie .NET 5+ en .NET Standard voor meer informatie.

.NET Standard 2.0 was de laatste versie ter ondersteuning van .NET Framework.

Hulpprogramma's voor het overzetten

In plaats van een toepassing handmatig over te zetten van .NET Framework naar .NET, kunt u verschillende hulpprogramma's gebruiken om bepaalde aspecten van de upgrade te automatiseren. Het overzetten van een complex project is op zichzelf een complex proces. De hulpprogramma's kunnen helpen bij dat traject.

Zelfs als u een hulpprogramma gebruikt om uw toepassing te overzetten, moet u de sectie Overwegingen bij het overzetten in dit artikel bekijken.

Moderniseringsassistent voor GitHub Copilot-apps

Modernisering van GitHub Copilot-apps is een GitHub Copilot-chatassistent waarmee u projecten kunt plannen en upgraden naar nieuwere versies van .NET, naar Azure kunt migreren, afhankelijkheden kunt bijwerken en codecorrecties kunt toepassen. Azure-migratie wordt mogelijk gemaakt door toepassings- en code-evaluatie voor .NET

Deze chatassistent ondersteunt de volgende upgradepaden:

  • Werk projecten bij van oudere .NET-versies naar de nieuwste versie.
  • Werk projecten van .NET Framework bij naar de nieuwste versie van .NET.
  • Moderniseer uw codebasis met nieuwe functies.
  • Onderdelen en services migreren naar Azure.

Het werkt ook op verschillende projecttypen, zoals:

  • ASP.NET en gerelateerde technologieën zoals MVC, Razor Pages, Web-API
  • Blazor
  • Azure Functions (serverloze computerdiensten van Azure)
  • Windows Presentation Foundation
  • Windows Forms
  • Klassebibliotheken
  • Consoletoepassingen

Wanneer te gebruiken:

Gebruik de GitHub Copilot-appmodernisering wanneer u een AI-gedreven end-to-end ervaring wilt om .NET Framework-projecten en -afhankelijkheden bij te werken naar moderne .NET—met een grondige aanpak voor evaluatie, planning, herstel en begeleiding bij het migreren van toepassingen naar Azure.

Toepassings- en code-evaluatie voor .NET

Azure Migrate-toepassings- en code-evaluatie voor .NET biedt code- en toepassingsanalyse, samen met aanbevelingen voor het plannen van cloudimplementaties. Het helpt u om bedrijfskritieke oplossingen in de cloud uit te voeren door een op ontwikkelaars gerichte evaluatie van uw broncode aan te bieden. Het hulpprogramma biedt ook aanbevelingen en voorbeelden voor het optimaliseren van code en configuraties voor Azure, volgens aanbevolen procedures voor de branche.

Dit hulpprogramma wordt ook gebruikt door de modernisering van de GitHub Copilot-app voor .NET-ervaring.

Wanneer te gebruiken:

Gebruik de Azure Migrate-toepassings- en code-evaluatie voor .NET-hulpprogramma's voor een evaluatie van en aanbevelingen voor het migreren van een bestaande codebasis naar Azure. De Azure Migrate-toepassing en code-evaluatie is in feite een subset van de modernisering van de GitHub Copilot-app voor .NET-ervaring.

.NET-upgradeassistent

De .NET Upgrade Assistant is een opdrachtregelprogramma dat kan worden uitgevoerd op verschillende soorten .NET Framework-apps. Het is ontworpen om te helpen bij het upgraden van .NET Framework-apps naar .NET. Na het uitvoeren van het hulpprogramma is er in de meeste gevallen meer moeite nodig om de upgrade te voltooien. Het hulpprogramma bevat de installatie van analysefuncties die kunnen helpen bij het voltooien van de upgrade. Dit hulpprogramma werkt op de volgende typen .NET Framework-toepassingen:

  • Windows Forms
  • WPF
  • ASP.NET MVC
  • Console
  • Klassebibliotheken

Dit hulpprogramma maakt gebruik van de andere hulpprogramma's die in dit artikel worden vermeld, zoals try-convert en begeleidt het upgradeproces. Zie Overzicht van de .NET-upgradeassistent voor meer informatie over het hulpprogramma.

Wanneer te gebruiken:

Gebruik wanneer een AI-gestuurde oplossing zoals modernisering van apps door GitHub Copilot niet beschikbaar is.

try-convert

Het try-convert hulpprogramma is een algemeen .NET-hulpprogramma waarmee een project of volledige oplossing kan worden geconverteerd naar de .NET SDK, waaronder het verplaatsen van desktop-apps naar .NET. Dit hulpprogramma wordt echter niet aanbevolen als uw project een ingewikkeld buildproces heeft, zoals aangepaste taken, doelen of importbewerkingen.

Zie de try-convert GitHub-opslagplaats voor meer informatie.

Platformcompatibiliteitsanalyse

De platformcompatibiliteitsanalyse analyseert of u een API gebruikt die een PlatformNotSupportedException runtime genereert. Hoewel het vinden van een van deze API's onwaarschijnlijk is als u overstapt van .NET Framework 4.7.2 of hoger, is het goed om te controleren. Zie API's die altijd uitzonderingen genereren op .NET voor meer informatie over API's die uitzonderingen genereren op .NET Core.

Zie platformcompatibiliteitsanalyse voor meer informatie.

Overwegingen bij het overzetten

Houd bij het overzetten van uw toepassing naar .NET rekening met de volgende suggesties:

✔️ OVERWEEG het gebruik van de modernisering van de GitHub Copilot-app om uw projecten te upgraden. GitHub Copilot is krachtig bij het identificeren en oplossen van incompatibiliteit bij het overzetten. Het automatiseert de meeste handmatige stappen die in dit artikel worden beschreven en biedt u een goed uitgangspunt voor het voortzetten van uw upgradepad.

✔️ Overweeg eerst uw afhankelijkheden te onderzoeken. Uw afhankelijkheden moeten zijn gericht op .NET, .NET Standard of .NET Core.

✔️ Voer een upgrade uit van een NuGet -packages.config-bestand naar PackageReference instellingen in het projectbestand. Gebruik Visual Studio om het package.config bestand te converteren.

✔️ OVERWEEG een upgrade uit te voeren naar de nieuwste projectbestandsindeling, zelfs als u uw app nog niet kunt overzetten. .NET Framework-projecten maken gebruik van een verouderde projectindeling. Hoewel de nieuwste projectindeling, ook wel SDK-stijlprojecten genoemd, is gemaakt voor .NET Core en verder, werkt de indeling ook met .NET Framework. Als u uw projectbestand in de nieuwste indeling hebt, hebt u een goede basis voor het overzetten van uw app in de toekomst.

✔️ Stel uw .NET Framework-project opnieuw in op ten minste .NET Framework 4.7.2. Dit zorgt voor de beschikbaarheid van de nieuwste API-alternatieven voor gevallen waarin .NET Standard geen ondersteuning biedt voor bestaande API's.

✔️ OVERWEEG .NET 8 te gebruiken, een release met langdurige ondersteuning (LTS).

✔️ DO target .NET 8+ voor Windows Forms en WPF-projecten. .NET 8 en latere versies bevatten veel verbeteringen voor Desktop-apps.

✔️ OVERWEEG om .NET Standard 2.0 te gebruiken als u een upgrade uitvoert van een bibliotheek die ook kan worden gebruikt met .NET Framework-projecten. U kunt uw bibliotheek ook multitargeten, gericht op zowel .NET Framework als .NET Standard.

✔️ Voeg wel een verwijzing toe naar het NuGet-pakket Microsoft.Windows.Compatibility als u na de migratie fouten krijgt met ontbrekende API's. Een groot deel van het .NET Framework API-oppervlak is beschikbaar voor .NET via het NuGet-pakket.

Zie ook