Delen via


.NET Framework-technologieën zijn niet beschikbaar op .NET

Verschillende technologieën die beschikbaar zijn voor .NET Framework-bibliotheken zijn niet beschikbaar voor gebruik met .NET 6+, zoals app-domeinen, externe toegang en beveiliging van codetoegang (CAS). Als uw bibliotheken afhankelijk zijn van een of meer van de technologieën die op deze pagina worden vermeld, kunt u de vermelde alternatieve benaderingen overwegen.

Zie Belangrijke wijzigingen in .NET voor meer informatie over API-compatibiliteit.

Toepassingsdomeinen

Toepassingsdomeinen (AppDomains) isoleren apps van elkaar. AppDomains vereisen runtime-ondersteuning en zijn duur voor resources. Het maken van meer app-domeinen wordt niet ondersteund en er zijn geen plannen om deze mogelijkheid in de toekomst toe te voegen. Gebruik voor code-isolatie afzonderlijke processen of containers als alternatief. Als u assembly's dynamisch wilt laden, gebruikt u de AssemblyLoadContext klasse.

Om codemigratie vanuit .NET Framework eenvoudiger te maken, maakt .NET 6+ een deel van het AppDomain API-oppervlak beschikbaar. Sommige API's werken normaal (bijvoorbeeld AppDomain.UnhandledException), sommige leden doen niets (bijvoorbeeld SetCachePath) en sommige van hen gooien PlatformNotSupportedException (bijvoorbeeld CreateDomain). Controleer de typen die u gebruikt voor de System.AppDomain referentiebron in de GitHub-opslagplaats dotnet/runtime. Zorg ervoor dat u de vertakking selecteert die overeenkomt met uw geïmplementeerde versie.

Remoting

Externe communicatie van .NET wordt niet ondersteund op .NET 6+. Externe communicatie van .NET is geïdentificeerd als een problematische architectuur. Het wordt gebruikt voor communicatie tussen toepassingsdomeinen, die niet meer worden ondersteund. Voor externe communicatie is ook runtime-ondersteuning vereist, wat duur is om te onderhouden.

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. Voor complexere scenario's biedt het opensource StreamJsonRpc-project een platformoverschrijdend .NET Standard-externe framework dat op bestaande stroom- of pijpverbindingen werkt.

Gebruik op verschillende computers een netwerkoplossing als alternatief. Gebruik bij voorkeur een protocol voor tekst zonder opmaak met lage overhead, zoals HTTP. De Kestrel-webserver, de webserver die door ASP.NET Core wordt gebruikt, is hier een optie. Overweeg ook het gebruik System.Net.Sockets van scenario's voor meerdere computers op basis van netwerken. StreamJsonRpc, eerder vermeld, kan worden gebruikt voor JSON- of binaire communicatie (via MessagePack) via websockets.

Zie .NET Open Source Developer Projects: Messaging voor meer opties voor berichten.

Omdat externe communicatie niet wordt ondersteund, worden oproepen naar BeginInvoke() en EndInvoke() op gedelegeerde objecten gegooid PlatformNotSupportedException. Zie Het migreren van Gemachtigde BeginInvoke-aanroepen voor .NET Core voor meer informatie.

Beveiliging van codetoegang (CAS)

Sandboxing, die afhankelijk is van de runtime of het framework om te beperken welke resources een beheerde toepassing of bibliotheek gebruikt of uitvoert, wordt niet ondersteund op .NET Framework en wordt daarom ook niet ondersteund op .NET 6+. CAS wordt niet langer behandeld als een beveiligingsgrens, omdat er te veel gevallen zijn in .NET Framework en de runtime waarbij een uitbreiding van bevoegdheden plaatsvindt. Cas maakt de implementatie ook ingewikkelder en heeft vaak gevolgen voor de juistheid van de prestaties voor toepassingen die deze niet willen gebruiken.

Gebruik beveiligingsgrenzen die worden geleverd door het besturingssysteem, zoals virtualisatie, containers of gebruikersaccounts, voor het uitvoeren van processen met de minimale set bevoegdheden.

Transparantie van beveiliging

Net als bij CAS scheidt de beveiligingstransparantie code in de sandbox van kritieke code op declaratieve wijze, maar wordt deze niet meer ondersteund als een beveiligingsgrens. Deze functie wordt intensief gebruikt door Silverlight.

Als u processen met de minste set bevoegdheden wilt uitvoeren, gebruikt u beveiligingsgrenzen die worden geboden door het besturingssysteem, zoals virtualisatie, containers of gebruikersaccounts.

System.EnterpriseServices

System.EnterpriseServices (COM+) wordt niet ondersteund door .NET 6+.

Werkstroomfundament

Windows Workflow Foundation (WF) wordt niet ondersteund in .NET 6+. Zie CoreWF voor een alternatief.

Tip

De WCF-server (Windows Communication Foundation) kan worden gebruikt in .NET 6+ met behulp van de CoreWCF NuGet-pakketten. Zie CoreWCF 1.0 is uitgebracht voor meer informatie.

Sommige weerspiegelings-API's worden niet ondersteund

.NET 8 en eerdere versies van .NET (Core) bieden geen ondersteuning voor het opslaan van assembly's die worden gegenereerd door de System.Reflection.Emit API's en de AssemblyBuilder.Save methode is niet beschikbaar. Bovendien zijn de volgende velden van de AssemblyBuilderAccess opsomming niet beschikbaar:

In .NET 9 is er een PersistedAssemblyBuilder geïmplementeerd en is de AssemblyBuilder.Save methode weer toegevoegd aan de bibliotheek reflectie-emit. Zie de klasse System.Reflection.Emit.PersistedAssemblyBuilder voor meer informatie over het gebruik van deze API.

Zie System.Reflection.Emit.AssemblyBuilder-klasse voor meer informatie over de verschillende AssemblyBuilder-implementaties in .NET

Assembly's met meerdere modules laden

Assembly's die bestaan uit meerdere modules (OutputType=Module in MSBuild) worden niet ondersteund in .NET 6+.

Als alternatief kunt u overwegen om de afzonderlijke modules samen te voegen in één assemblybestand.

XSLT-scriptblokken

XSLT-scriptblokken worden alleen ondersteund in .NET Framework. Ze worden niet ondersteund op .NET 6 of hoger.

Zie ook