Sdílet prostřednictvím


Zastaralá rozhraní API pro vzdálenou komunikaci

Některá rozhraní API související se vzdálené komunikace jsou označená jako zastaralá a vygenerují SYSLIB0010 upozornění v době kompilace. Tato rozhraní API mohou být odebrána v budoucí verzi rozhraní .NET.

Změna popisu

Následující rozhraní API vzdálené komunikace jsou označena zastaralá.

rozhraní API Označeno jako zastaralé v...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

V rozhraní .NET Framework 2.x – 4.x GetLifetimeService() řídí a InitializeLifetimeService() metody dobu života instancí zapojených do vzdálené komunikace .NET. V .NET Core 2.x- 3.x tyto metody vždy vyvolat PlatformNotSupportedException za běhu.

V .NET 5 a novějších verzích jsou metody GetLifetimeService() InitializeLifetimeService() a metody označeny jako upozornění, ale nadále házet PlatformNotSupportedException za běhu.

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

Jedná se pouze o změnu v době kompilace. V předchozích verzích .NET Core nedošlo k žádné změně za běhu.

Důvod změny

Vzdálené komunikace .NET je starší technologie. Umožňuje vytvoření instance objektu v jiném procesu (potenciálně i na jiném počítači) a interakci s tímto objektem, jako by to byla běžná instance objektu .NET v procesu. Infrastruktura vzdálené komunikace .NET existuje pouze v rozhraní .NET Framework 2.x – 4.x. Rozhraní .NET Core a .NET 5 a novější verze nemají podporu vzdálené komunikace .NET a rozhraní API vzdálené komunikace buď neexistují, nebo v těchto modulech runtime vždy vyvolává výjimky.

Abychom vývojářům pomohli odejít z těchto rozhraní API, zaplníme vybraná vzdálená rozhraní API související s vzdálenou komunikace. Tato rozhraní API se můžou úplně odebrat v budoucí verzi .NET.

Zavedená verze

.NET 5.0

  • Zvažte použití služeb REST založených na WCF nebo HTTP ke komunikaci s objekty v jiných aplikacích nebo napříč počítači. Další informace naleznete v tématu Technologie rozhraní .NET Framework nedostupné v .NET Core.

  • Pokud musíte i nadále používat zastaralá rozhraní API, můžete upozornění v kódu potlačit SYSLIB0010 .

    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.
    

    Upozornění v souboru projektu můžete také potlačit, což zakáže upozornění pro všechny zdrojové soubory v projektu.

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

    SYSLIB0010 Potlačení zakáže pouze upozornění na obsoletion rozhraní API vzdálené komunikace. Nezakážuje žádná další upozornění. Navíc nemění pevně zakódované chování běhového běhu vždy vyvolání PlatformNotSupportedException.

Ovlivněná rozhraní API