Sdílet prostřednictvím


Zastaralá vzdálená rozhraní API

Některá rozhraní API související se vzdáleným přístupem jsou označena jako zastaralá a vygenerují SYSLIB0010 varování při kompilaci. Tato rozhraní API mohou být odebrána v budoucích verzích rozhraní .NET.

Změnit popis

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

API (rozhraní pro programování aplikací) Označeno jako zastaralé v...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

V rozhraní .NET Framework 2.x – 4.x metody GetLifetimeService() a InitializeLifetimeService() řídí dobu života instancí zapojených do .NET remotingu. V .NET Core 2.x- 3.x tyto metody vždy vyvolávají PlatformNotSupportedException při spuštění.

V .NET 5 a novějších verzích jsou metody GetLifetimeService() a InitializeLifetimeService() označeny jako zastaralé s upozorněním, ale nadále vyvolávají 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

.NET remoting 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 nepodporují .NET remoting a rozhraní API pro remoting buď neexistují, nebo na těchto runtimes vždy vyvolávají výjimky.

Abychom vývojáře odradili od používání těchto rozhraní API, činíme vybraná rozhraní API související s vzdálenou komunikací zastaralými. Tato rozhraní API se můžou úplně odebrat v některé budoucí verzi .NET.

Verze byla představena

.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>
    

    Potlačení SYSLIB0010 zakáže pouze upozornění na zastaralost rozhraní API. 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