Remoting-APIs sind veraltet

Einige Remoting-bezogene APIs werden als veraltet gekennzeichnet und lösen zur Kompilierzeit die Warnung SYSLIB0010 aus. Diese APIs werden unter Umständen aus zukünftigen Versionen von .NET entfernt.

Änderungsbeschreibung

Die folgenden APIs sind als veraltet markiert.

API Als veraltet markiert in...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

In .NET Framework 2.x bis 4.x steuern die Methoden GetLifetimeService() und InitializeLifetimeService() die Lebensdauer von Instanzen, die an .NET-Remoting beteiligt sind. In .NET Core 2.x bis 3.x lösen diese Methoden zur Laufzeit immer eine Ausnahme des Typs PlatformNotSupportedException aus.

In .NET 5 und höher sind die Methoden GetLifetimeService() und InitializeLifetimeService() durch eine Warnung als veraltet gekennzeichnet, lösen jedoch weiterhin zur Laufzeit eine Ausnahme des Typs PlatformNotSupportedException aus.

// MemoryStream, like all Stream instances, subclasses MarshalByRefObject.
MemoryStream stream = new MemoryStream();
// Throws PlatformNotSupportedException; also produces warning SYSLIB0010.
obj.InitializeLifetimeService();

Dies ist eine Änderung, die nur die Kompilierzeit betrifft. Hinsichtlich der Laufzeit gibt es keine Änderung im Vergleich zu früheren Versionen von .NET Core.

Grund für die Änderung

.NET-Remoting ist eine Legacytechnologie. Sie ermöglicht das Instanziieren eines Objekts in einem anderen Prozess (möglicherweise sogar auf einem anderen Computer) und das Interagieren mit diesem Objekt, als wäre es eine gewöhnliche In-Process-.NET-Objektinstanz. Die Infrastruktur für das .NET-Remoting ist nur in .NET Framework 2.x bis 4.x vorhanden. .NET Core sowie .NET 5 und höher bieten keine Unterstützung für .NET-Remoting, und die Remoting-APIs sind entweder nicht vorhanden oder lösen in diesen Runtimes immer Ausnahmen aus.

Damit Entwickler zunehmend andere APIs verwenden, werden ausgewählte Remoting-APIs als veraltet markiert. Diese APIs werden unter Umständen vollständig aus zukünftigen Versionen von .NET entfernt.

Eingeführt in Version

.NET 5.0

  • Sie sollten unter Umständen WCF- oder HTTP-basierte REST-Dienste verwenden, um mit Objekten in anderen Anwendungen oder auf anderen Computern zu kommunizieren. Weitere Informationen finden Sie unter In .NET Core nicht verfügbare .NET Framework-Technologien.

  • Wenn Sie die veralteten APIs weiterhin verwenden müssen, können Sie die Warnung SYSLIB0010 im Code unterdrücken.

    MarshalByRefObject obj = GetMarshalByRefObj();
    #pragma warning disable SYSLIB0010 // Disable the warning.
    obj.InitializeLifetimeService(); // Still throws PNSE.
    obj.GetLifetimeService(); // Still throws PNSE.
    #pragma warning restore SYSLIB0010 // Reenable the warning.
    

    Sie können die Warnung auch in Ihrer Projektdatei unterdrücken, wodurch die Warnung für alle Quelldateien im Projekt deaktiviert wird.

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
       <TargetFramework>net5.0</TargetFramework>
       <!-- NoWarn below will suppress SYSLIB0010 project-wide -->
       <NoWarn>$(NoWarn);SYSLIB0010</NoWarn>
      </PropertyGroup>
    </Project>
    

    Durch das Unterdrücken von SYSLIB0010 werden nur Veraltungswarnungen für die Remoting-APIs deaktiviert. Andere Warnungen werden nicht deaktiviert. Außerdem wird das hartcodierte Laufzeitverhalten nicht geändert, das darin besteht, PlatformNotSupportedException immer auszulösen.

Betroffene APIs