Interfejsy API komunikacji zdalnej są przestarzałe

Niektóre interfejsy API związane z komunikacjią zdalną SYSLIB0010 są oznaczone jako przestarzałe i generują ostrzeżenie w czasie kompilacji. Te interfejsy API mogą zostać usunięte w przyszłej wersji platformy .NET.

Opis zmiany

Następujące interfejsy API komunikacji zdalnie są oznaczone jako przestarzałe.

interfejs API Oznaczone jako przestarzałe w...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

W programie .NET Framework 2.x — 4.x GetLifetimeService() metody i InitializeLifetimeService() kontrolują okres istnienia wystąpień związanych z komunikacji wirtualnej platformy .NET. W programie .NET Core 2.x- 3.x te metody zawsze zgłaszają PlatformNotSupportedException błąd w czasie wykonywania.

W programie .NET 5 lub nowszych wersjach GetLifetimeService() metody i InitializeLifetimeService() są oznaczone jako przestarzałe jako ostrzeżenie, ale nadal zgłaszają PlatformNotSupportedException błąd w czasie wykonywania.

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

Jest to zmiana tylko w czasie kompilacji. Nie ma zmian w czasie wykonywania z poprzednich wersji platformy .NET Core.

Przyczyna wprowadzenia zmiany

Komunikacja zdalna platformy .NET to starsza technologia. Umożliwia utworzenie wystąpienia obiektu w innym procesie (potencjalnie nawet na innej maszynie) i interakcję z tym obiektem tak, jakby był to zwykłe, w procesie wystąpienie obiektu .NET. Infrastruktura komunikacji wirtualnej platformy .NET istnieje tylko w programie .NET Framework 2.x — 4.x. Programy .NET Core i .NET 5 i nowsze nie obsługują komunikacji wirtualnej platformy .NET, a interfejsy API komunikacji wirtualnej nie istnieją lub zawsze zgłaszają wyjątki w tych środowiskach uruchomieniowych.

Aby pomóc deweloperom w odejściu od tych interfejsów API, obsoleting wybrane interfejsy API związane z komunikacjią zdalną. Te interfejsy API mogą zostać całkowicie usunięte w przyszłej wersji platformy .NET.

Wprowadzona wersja

.NET 5.0

  • Rozważ użycie usług REST opartych na protokole WCF lub HTTP do komunikowania się z obiektami w innych aplikacjach lub na różnych maszynach. Aby uzyskać więcej informacji, zobacz technologie .NET Framework niedostępne na platformie .NET Core.

  • Jeśli nadal musisz używać przestarzałych interfejsów API, możesz pominąć SYSLIB0010 ostrzeżenie w kodzie.

    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.
    

    Możesz również pominąć ostrzeżenie w pliku projektu, co powoduje wyłączenie ostrzeżenia dla wszystkich plików źródłowych w projekcie.

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

    Pomijanie SYSLIB0010 powoduje wyłączenie tylko ostrzeżeń dotyczących obsoletion interfejsu API komunikacji zdalnie. Nie wyłącza żadnych innych ostrzeżeń. Ponadto nie zmienia ono zakodowanego na stałe zachowania czasu wykonywania zawsze zgłaszanego PlatformNotSupportedExceptionelementu .

Dotyczy interfejsów API