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 van .NET Framework voor veel projecten is relatief eenvoudig. De complexiteit van uw projecten bepaalt hoeveel werk u moet doen na de eerste migratie van de projectbestanden.
Projecten waarbij het app-model beschikbaar is in .NET (zoals bibliotheken, console-apps en desktop-apps) vereisen meestal weinig wijzigingen. Voor projecten waarvoor een nieuw app-model is vereist, zoals overstappen naar ASP.NET Core van ASP.NET, is meer werk vereist. Veel patronen van het oude app-model hebben equivalenten die tijdens de conversie kunnen worden gebruikt.
Windows desktoptechnologieën
Veel toepassingen die zijn gemaakt voor .NET Framework maken gebruik van bureaubladtechnologie, zoals Windows Forms of Windows Presentation Foundation (WPF). Zowel Windows Forms als WPF zijn overgezet naar .NET, maar deze blijven Windows technologieën.
Houd rekening met de volgende afhankelijkheden voordat u een Windows Forms- of WPF-toepassing migreert:
- Project bestanden 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 migreren van uw bureaubladtoepassing naar .NET 6:
Windows-specifieke API's
Toepassingen kunnen nog steeds systeemeigen bibliotheken P/Aanroepen 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 op 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.
Bij het overzetten van een toepassing van .NET Framework naar .NET heeft uw toepassing waarschijnlijk een bibliotheek gebruikt die is gedistribueerd met de .NET Framework. 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 naar .NET en wordt geleverd via microsoft.Windows. NuGet-compatibiliteitspakket.
Zie Het compatibiliteitspakket Windows gebruiken voor poortcode naar .NET voor meer informatie.
.NET Framework compatibiliteitsmodus
De .NET Framework compatibiliteitsmodus is geïntroduceerd in .NET Standard 2.0. Met deze compatibiliteitsmodus kunnen .NET Standard- en .NET 5+ (en .NET Core 3.1)-projecten verwijzen naar .NET Framework bibliotheken op Windows alleen. Het verwijzen naar .NET Framework bibliotheken werkt niet voor alle projecten, bijvoorbeeld als de bibliotheek gebruikmaakt van WINDOWS PRESENTATION FOUNDATION (WPF)-API's, maar er worden veel scenario's voor overdracht opgeheven. Zie voor meer informatie de poortcode analyseren van .NET Framework naar .NET.
Niet-beschikbare technologieën
Er zijn enkele technologieën in .NET Framework die niet bestaan in .NET:
-
Het maken van extra toepassingsdomeinen wordt niet ondersteund. Gebruik voor code-isolatie afzonderlijke processen of containers als alternatief.
-
Externe communicatie wordt gebruikt voor communicatie tussen toepassingsdomeinen, die niet meer worden ondersteund. Voor eenvoudige communicatie tussen processen kunt u IPC-mechanismen (Inter-Process Communication) overwegen als alternatief voor externe communicatie, zoals de System.IO.Pipes klasse of de MemoryMappedFile klasse. Overweeg voor complexere scenario's frameworks zoals StreamJsonRpc of ASP.NET Core (met gRPC of RESTful Web API-services).
Beveiliging van codetoegang (CAS)
CAS was een sandbox-techniek die wordt ondersteund door .NET Framework, maar afgeschaft in .NET Framework 4.0. Deze 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.
-
Net als bij CAS wordt deze sandbox-techniek 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 (COM+) wordt niet ondersteund in .NET.
Windows Workflow Foundation (WF)
WF wordt niet ondersteund in .NET 5+ (inclusief .NET Core). Zie CoreWF voor een alternatief.
Zie voor meer informatie over deze niet-ondersteunde technologieën .NET Framework technologieën niet beschikbaar zijn op .NET Core en .NET 5+.
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. Dit omvat projecttypen zoals:
- Bibliotheken
- Consolehulpprogramma'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 Windows Presentation Foundation (WPF), kan de code nog steeds worden uitgevoerd op .NET, maar wordt deze niet uitgevoerd op andere besturingssystemen.
Het is mogelijk dat uw bibliotheek- of consoletoepassing platformoverschrijdend kan worden gebruikt zonder dat er veel hoeft te worden gewijzigd. Bij het overzetten naar .NET kunt u hier rekening mee houden 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 op meerdere .NET-implementaties. De motivatie achter .NET Standard was om meer uniformiteit te creëren in het .NET-ecosysteem. Vanaf .NET 5 is er een andere benadering voor het tot stand brengen van uniformiteit vastgesteld. Deze nieuwe aanpak 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 dragen van .NET Framework naar .NET, kunt u verschillende hulpprogramma's gebruiken om bepaalde aspecten van de migratie te automatiseren. Het overzetten van een complex project is op zichzelf een complex proces. Deze hulpprogramma's kunnen helpen bij dat traject.
Zelfs als u een hulpprogramma gebruikt om uw toepassing te porteren, moet u de sectie Overwegingen bij het overzetten in dit artikel bekijken.
.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 5. Nadat het hulpprogramma is uitgevoerd, is er in de meeste gevallen meer moeite nodig om de migratie te voltooien. Het hulpprogramma bevat de installatie van analyseprogramma's die kunnen helpen bij het voltooien van de migratie. Dit hulpprogramma werkt op de volgende typen .NET Framework toepassingen:
- Windows Forms
- WPF
- ASP.NET MVC
- Console
- Klassenbibliotheken
Dit hulpprogramma maakt gebruik van de andere hulpprogramma's die in dit artikel worden vermeld en begeleidt het migratieproces. Zie Overzicht van de .NET Upgrade Assistant voor meer informatie over het hulpprogramma.
try-convert
Het hulpprogramma try-convert 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 5. Dit hulpprogramma wordt echter niet aanbevolen als uw project een ingewikkeld bouwproces heeft, zoals aangepaste taken, doelen of importbewerkingen.
Zie de opslagplaats try-convert GitHub voor meer informatie.
.NET Portability Analyzer
.NET Portability Analyzer is een hulpprogramma waarmee assembly's worden geanalyseerd en een gedetailleerd rapport wordt gegeven over .NET-API's die ontbreken voor de toepassingen of bibliotheken die kunnen worden overdraagbaar op uw opgegeven .NET-platforms.
Als u .NET Portability Analyzer in Visual Studio wilt gebruiken, installeert u de extensie vanuit de marketplace.
Zie .NET Portability Analyzer voor meer informatie.
Platformcompatibiliteitsanalyse
De platformcompatibiliteitsanalyse analyseert of u al dan niet een API gebruikt die een PlatformNotSupportedException runtime genereert. Hoewel dit niet gebruikelijk is als u overstapt van .NET Framework 4.7.2 of hoger, is het goed om te controleren. Zie API's die altijd uitzonderingen op .NET Core genereren voor meer informatie over API's die uitzonderingen genereren op .NET Core.
Zie Platformcompatibiliteitsanalyse voor meer informatie.
Overwegingen bij het overzetten
Houd rekening met de volgende suggesties bij het overzetten van uw toepassing naar .NET.
✔️ OVERWEEG om de .NET Upgrade Assistant te gebruiken om uw projecten te migreren. Hoewel dit hulpprogramma in preview is, worden de meeste handmatige stappen in dit artikel geautomatiseerd en krijgt u een goed uitgangspunt voor het voortzetten van uw migratiepad.
✔️ OVERWEEG eerst uw afhankelijkheden te onderzoeken. Uw afhankelijkheden moeten zich richten op .NET 5, .NET Standard of .NET Core.
✔️ DO migrate from a NuGet packages.config file to PackageReference settings in the project file. Gebruik Visual Studio om het package.config bestand te converteren.
✔️ OVERWEEG om een upgrade uit te voeren naar de nieuwste projectbestandsindeling, zelfs als u uw app nog niet kunt overzetten. .NET Framework projecten een verouderde projectindeling gebruiken. Hoewel de nieuwste projectindeling, ook wel SDK-stijlprojecten genoemd, is gemaakt voor .NET Core en verder, werken ze met .NET Framework. Als u uw projectbestand in de nieuwste indeling hebt, beschikt u over een goede basis voor het overzetten van uw app in de toekomst.
✔️ VOER 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 5 in plaats van .NET Core 3.1 te richten. Hoewel .NET Core 3.1 op lange termijn ondersteuning (LTS) heeft, is .NET 5 de nieuwste en .NET 6 is LTS wanneer deze wordt uitgebracht.
✔️ DO target .NET 5 voor Windows Forms- en WPF-projecten. .NET 5 bevat veel verbeteringen voor Desktop-apps.
✔️ OVERWEEG .NET Standard 2.0 als u een bibliotheek migreert die ook kan worden gebruikt met .NET Framework projecten. U kunt uw bibliotheek ook multitargeten, gericht op zowel .NET Framework als .NET Standard.
✔️ Do add reference to the Microsoft.Windows. Compatibiliteits NuGet-pakket 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.