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