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
Doporučená akce
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.