.NET Framework-tekniker är inte tillgängliga på .NET
Flera tekniker som är tillgängliga för .NET Framework-bibliotek är inte tillgängliga för användning med .NET 6+, till exempel appdomäner, fjärrkommunikation och kodåtkomstsäkerhet (CAS). Om dina bibliotek förlitar sig på en eller flera av de tekniker som anges på den här sidan bör du överväga de alternativa metoder som nämns.
Mer information om API-kompatibilitet finns i Breaking changes i .NET.
Programdomäner
Programdomäner (AppDomains) isolerar appar från varandra. AppDomains kräver körningsstöd och är resursdyra. Det går inte att skapa fler appdomäner och det finns inga planer på att lägga till den här funktionen i framtiden. Använd separata processer eller containrar som ett alternativ för kodisolering. Om du vill läsa in sammansättningar dynamiskt använder du klassen AssemblyLoadContext.
För att göra kodmigrering från .NET Framework enklare exponerar .NET 6+ en del av AppDomain API-ytan. Vissa API:er fungerar normalt (till exempel AppDomain.UnhandledException), vissa medlemmar gör ingenting (till exempel SetCachePath), och vissa av dem genererar PlatformNotSupportedException (till exempel CreateDomain). Kontrollera de typer som du använder mot System.AppDomain
referenskällan på github-lagringsplatsen dotnet/runtime. Se till att välja den gren som matchar den implementerade versionen.
Fjärrkommunikation
.NET-fjärrkommunikation stöds inte på .NET 6+. .NET-fjärrkommunikation identifierades som en problematisk arkitektur. Det används för kommunikation mellan programdomäner, som inte längre stöds. Dessutom kräver fjärrstyrning körstöd, vilket är dyrt att underhålla.
För enkel kommunikation mellan processer bör du överväga mekanismer för kommunikation mellan processer (IPC) som ett alternativ till fjärrkommunikation, till exempel klassen System.IO.Pipes eller klassen MemoryMappedFile. För mer komplexa scenarier tillhandahåller projektet StreamJsonRpc ett plattformsoberoende .NET Standard-fjärrkommunikationsramverk som fungerar ovanpå befintliga ström- eller röranslutningar.
Mellan datorer använder du en nätverksbaserad lösning som ett alternativ. Använd helst ett protokoll med låg overhead, såsom ren text-protokoll, till exempel HTTP. Kestrel-webbservern, som är den webbserver som används av ASP.NET Core, är ett alternativ här. Överväg också att använda System.Net.Sockets för nätverksbaserade scenarier mellan datorer. StreamJsonRpc, som nämnts tidigare, kan användas för JSON- eller binär kommunikation (via MessagePack) via webbsocketar.
Fler meddelandealternativ finns i .NET Open Source Developer Projects: Messaging.
Eftersom fjärrkommunikation inte stöds utlöser anrop till BeginInvoke()
och EndInvoke()
på ombudsobjekt PlatformNotSupportedException
. Mer information finns i Migrera delegatens BeginInvoke-anrop för .NET Core.
Kodåtkomstsäkerhet (CAS)
Sandbox-miljö, som förlitar sig på körningen eller ramverket för att begränsa vilka resurser ett hanterat program eller bibliotek använder eller kör, stöds inte på .NET Framework- och stöds därför inte heller på .NET 6+. CAS behandlas inte längre som en säkerhetsgräns eftersom det finns för många fall i .NET Framework och körningen där en behörighetshöjning sker. Dessutom gör CAS implementeringen mer komplicerad och har ofta konsekvenser för korrekthetsprestanda för program som inte tänker använda den.
Använd säkerhetsgränser som tillhandahålls av operativsystemet, till exempel virtualisering, containrar eller användarkonton, för att köra processer med minsta möjliga behörighet.
Säkerhetstransparens
I likhet med CAS separerar säkerhetstransparensen kod i begränsat läge från säkerhetskritisk kod på ett deklarativt sätt, men stöds inte längre som en säkerhetsgräns. Den här funktionen används mycket av Silverlight.
Om du vill köra processer med minsta möjliga behörighet använder du säkerhetsgränser som tillhandahålls av operativsystemet, till exempel virtualisering, containrar eller användarkonton.
System.EnterpriseServices
System.EnterpriseServices (COM+) stöds inte av .NET 6+.
Workflow Foundation
Windows Workflow Foundation (WF) stöds inte i .NET 6+. För ett alternativ, se CoreWF.
Tips
Windows Communication Foundation-servern (WCF) kan användas i .NET 6+ med hjälp av CoreWCF NuGet-paket. För mer information, se CoreWCF 1.0 har släppts.
Vissa API:er för reflektionsemitterande stöds inte
.NET 8 och tidigare versioner av .NET (Core) har inte stöd för att spara sammansättningar som genereras av System.Reflection.Emit API:er och metoden AssemblyBuilder.Save är inte tillgänglig. Dessutom är följande fält i AssemblyBuilderAccess uppräkning inte tillgängliga:
I .NET 9 implementerades en PersistedAssemblyBuilder
och metoden AssemblyBuilder.Save lades tillbaka till reflektionsbiblioteket. Mer information om hur du använder det här API:et finns i klassen System.Reflection.Emit.PersistedAssemblyBuilder.
Mer information om de olika AssemblyBuilder-implementeringarna i .NET finns i System.Reflection.Emit.AssemblyBuilder-klass.
Läser in sammansättningar för flera moduler
Sammansättningar som består av flera moduler (OutputType=Module
i MSBuild) stöds inte i .NET 6+.
Alternativt kan du överväga att slå samman de enskilda modulerna i en enda sammansättningsfil.
XSLT-skriptblock
XSLT-skriptblock stöds endast i .NET Framework. De stöds inte på .NET 6 eller senare.