Dela via


Api:er för fjärrkommunikation är föråldrade

Vissa fjärrkommunikationsrelaterade API:er markeras som föråldrade och genererar en SYSLIB0010 varning vid kompileringstillfället. Dessa API:er kan tas bort i en framtida version av .NET.

Ändra beskrivning

Följande api:er för fjärrkommunikation är markerade som föråldrade.

API Markerad som föråldrad i...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

I .NET Framework 2.x – 4.x GetLifetimeService() styr metoderna och InitializeLifetimeService() livslängden för instanser som ingår i .NET-fjärrkommunikation. I .NET Core 2.x- 3.x genererar dessa metoder alltid en PlatformNotSupportedException vid körning.

I .NET 5 och senare versioner GetLifetimeService() markeras metoderna och InitializeLifetimeService() som föråldrade som varning, men fortsätter att utlösa en PlatformNotSupportedException vid körning.

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

Det här är en kompileringstidsändring. Det finns ingen körningsändring från tidigare versioner av .NET Core.

Orsak till ändringen

.NET-fjärrkommunikation är en äldre teknik. Det gör det möjligt att instansiera ett objekt i en annan process (eventuellt även på en annan dator) och interagera med det objektet som om det vore en vanlig, pågående .NET-objektinstans. .NET-fjärrkommunikationsinfrastrukturen finns bara i .NET Framework 2.x –4.x. .NET Core- och .NET 5- och senare versioner har inte stöd för .NET-fjärrkommunikation, och api:erna för fjärrkommunikation finns antingen inte eller utlöser alltid undantag på dessa körningar.

För att hjälpa utvecklare att komma bort från dessa API:er döljer vi valda fjärrkommunikationsrelaterade API:er. Dessa API:er kan tas bort helt i en framtida version av .NET.

Version introducerad

.NET 5.0

  • Överväg att använda WCF- eller HTTP-baserade REST-tjänster för att kommunicera med objekt i andra program eller mellan datorer. Mer information finns i .NET Framework-tekniker som inte är tillgängliga på .NET Core.

  • Om du måste fortsätta att använda föråldrade API:er kan du utelämna varningen SYSLIB0010 i koden.

    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.
    

    Du kan också ignorera varningen i projektfilen, vilket inaktiverar varningen för alla källfiler i projektet.

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

    Om du utelämnar SYSLIB0010 inaktiveras endast varningar om api-obsoletion för fjärrkommunikation. Inga andra varningar inaktiveras. Dessutom ändrar det inte det hårdkodade körningsbeteendet för att alltid kasta PlatformNotSupportedException.

Berörda API:er