Teilen über


.NET Framework-Technologien, die in .NET nicht verfügbar sind

Mehrere Technologien, die für .NET Framework-Bibliotheken verfügbar sind, stehen für die Verwendung mit .NET 6 oder höher nicht zur Verfügung, etwa App-Domänen, Remoting und Codezugriffssicherheit (Code Access Security, CAS). Wenn Ihre Bibliotheken eine oder mehrere der auf dieser Seite aufgeführten Technologien benötigen, sollten Sie die beschriebenen alternativen Ansätze in Erwägung ziehen.

Weitere Informationen zur API-Kompatibilität finden Sie unter Breaking Changes in .NET.

Anwendungsdomänen

Anwendungsdomänen (AppDomains) isolieren Apps voneinander. AppDomains benötigen Runtimeunterstützung und sind ressourcenintensiv. Das Erstellen zusätzlicher AppDomains wird nicht unterstützt, und es ist nicht geplant, diese Funktion in Zukunft hinzuzufügen. Für Codeisolierung verwenden Sie separate Prozesse oder Container als Alternative. Verwenden Sie zum dynamischen Laden von Assemblys die AssemblyLoadContext-Klasse.

Zur Vereinfachung der Codemigration vom .NET Framework stellen .NET 6 und höhere Versionen einen Teil der AppDomain-API-Oberfläche zur Verfügung. Manche Elemente der APIs funktionieren normal (z.B. AppDomain.UnhandledException), einige Member führen keine Aktion aus (z.B. SetCachePath), und einige davon lösen PlatformNotSupportedException aus (z.B. CreateDomain). Überprüfen Sie die Typen, die Sie verwenden, anhand der System.AppDomain-Referenzquelle im GitHub-Repository „dotnet/runtime“. Stellen Sie sicher, dass Sie den Branch auswählen, der ihrer implementierten Version entspricht.

Remoting

.NET Remoting wird unter .NET 6 und höher nicht unterstützt. .NET-Remoting wurde als eine problematische Architektur identifiziert. Es wird für die Kommunikation zwischen Anwendungsdomänen verwendet, die nicht mehr unterstützt werden. Darüber hinaus erfordert Remoting die Runtimeunterstützung, deren Wartung teuer ist.

Für einfache Kommunikation zwischen Prozessen sollten Sie die Mechanismen prozessübergreifender Kommunikation (Inter-Process Communication, IPC) als Alternative zu Remoting berücksichtigen, z. B. die Klassen System.IO.Pipes oder MemoryMappedFile. Für komplexere Szenarien bietet das Open-Source-Projekt StreamJsonRpc ein plattformübergreifendes .NET Standard-Remotingframework, das über vorhandene Stream- oder Pipeverbindungen funktioniert.

Verwenden Sie computerübergreifend eine netzwerkbasierte Lösung als Alternative. Verwenden Sie vorzugsweise ein Nur-Text-Protokoll mit geringem Verwaltungsaufwand, z.B. HTTP. Der Kestrel-Webserver, der von ASP.NET Core verwendete Webserver, ist hier eine Option. Ziehen Sie auch die Verwendung von System.Net.Sockets für netzwerkbasierte, computerübergreifende Szenarien in Erwägung. Das bereits erwähnte StreamJsonRpc-Framework kann für JSON- oder binäre Kommunikation (über MessagePack) über Websockets verwendet werden.

Weitere Messagingoptionen finden Sie unter .NET Open Source Developer Projects: Messaging (.NET-Open-Source-Entwicklerprojekte: Messaging).

Da Remoting nicht unterstützt wird, werden Aufrufe von BeginInvoke() und EndInvoke() für Delegatobjekte ausgelöst PlatformNotSupportedException. Weitere Informationen finden Sie unter Migrieren von Delegaten für BeginInvoke-Aufrufe für .NET Core.

Codezugriffssicherheit (Code Access Security, CAS)

Das Verwenden einer Sandbox, das sich auf die Runtime oder das Framework verlässt, um einzuschränken, welche Ressourcen eine verwaltete Anwendung oder Bibliothek verwendet oder ausführt, wird in .NET Framework nicht unterstützt. Daher wird es auch in .NET 6 und höher nicht unterstützt. CAS wird nicht mehr als Sicherheitsgrenze behandelt, da es in .NET Framework und der Runtime zu viele Fälle gibt, in denen eine Rechteerweiterung auftritt. Außerdem macht CAS die Implementierung komplizierter und führt häufig zu Auswirkungen auf die Korrektheit und Leistung von Anwendungen, die diese Option nicht verwenden sollen.

Verwenden Sie vom Betriebssystem bereitgestellte Sicherheitsgrenzen, wie Virtualisierung, Container oder Benutzerkonten zum Ausführen von Prozessen mit den geringstmöglichen Berechtigungen.

Sicherheitstransparenz

Ähnlich wie CAS trennt die Sicherheitstransparenz den Sandboxcode von sicherheitsrelevantem Code in einer deklarativen Weise, aber sie wird nicht mehr als Sicherheitsgrenze unterstützt. Diese Funktion wird oft von Silverlight verwendet.

Zum Ausführen von Prozessen mit den geringstmöglichen Berechtigungen verwenden Sie vom Betriebssystem bereitgestellte Sicherheitsgrenzen wie Virtualisierung, Container oder Benutzerkonten.

System.EnterpriseServices

System.EnterpriseServices (COM+) wird von .NET 6 und höher nicht unterstützt.

Workflow Foundation

Windows Workflow Foundation (WF) wird in .NET 6 und höher nicht unterstützt. Eine Alternative finden Sie unter CoreWF.

Tipp

Ein WCF-Server (Windows Communication Foundation) kann ab .NET 6 mithilfe der NuGet-Pakete für CoreWCF verwendet werden. Weitere Informationen finden Sie unter CoreWCF 1.0 veröffentlicht.

Einige APIs für die Reflexionsausgabe werden nicht unterstützt.

.NET 8 und frühere Versionen von .NET (Core) unterstützen nicht das Speichern von Assemblys, die von den System.Reflection.Emit-APIs generiert werden, und die AssemblyBuilder.Save-Methode ist nicht verfügbar. Darüber hinaus sind die folgenden Felder der AssemblyBuilderAccess-Enumeration nicht verfügbar:

In .NET 9 wurde ein PersistedAssemblyBuilder implementiert, und die AssemblyBuilder.Save-Methode wurde wieder zur Bibliothek für die Reflexionsausgabe hinzugefügt. Weitere Informationen zur Verwendung dieser API finden Sie unter System.Reflection.Emit.PersistedAssemblyBuilder-Klasse.

Weitere Informationen zu den verschiedenen AssemblyBuilder-Implementierungen in .NET finden Sie unter System.Reflection.Emit.AssemblyBuilder-Klasse.

Laden von Assemblys mit mehreren Modulen

Assemblys aus mehreren Modulen (OutputType=Module in MSBuild), werden in .NET 6 und höher nicht unterstützt.

Alternativ können Sie die einzelnen Module in einer einzigen Assemblydatei zusammenführen.

XSLT-Skriptblöcke

XSLT-Skriptblöcke werden nur in .NET Framework unterstützt. In .NET 6 oder höher werden sie nicht unterstützt.

Siehe auch