Api:er för fjärrkommunikation är föråldrade
Vissa fjärrkommunikationsrelaterade API:er markeras som föråldrade och genererar en SYSLIB0010
varning vid kompileringstillfället. Dessa API:er kan tas bort i en framtida version av .NET.
Ändra beskrivning
Följande api:er för fjärrkommunikation är markerade som föråldrade.
API | Markerad som föråldrad i... |
---|---|
MarshalByRefObject.GetLifetimeService() | 5.0 RC1 |
MarshalByRefObject.InitializeLifetimeService() | 5.0 RC1 |
I .NET Framework 2.x – 4.x GetLifetimeService() styr metoderna och InitializeLifetimeService() livslängden för instanser som ingår i .NET-fjärrkommunikation. I .NET Core 2.x- 3.x genererar dessa metoder alltid en PlatformNotSupportedException vid körning.
I .NET 5 och senare versioner GetLifetimeService() markeras metoderna och InitializeLifetimeService() som föråldrade som varning, men fortsätter att utlösa en PlatformNotSupportedException vid körning.
// MemoryStream, like all Stream instances, subclasses MarshalByRefObject.
MemoryStream stream = new MemoryStream();
// Throws PlatformNotSupportedException; also produces warning SYSLIB0010.
obj.InitializeLifetimeService();
Det här är en kompileringstidsändring. Det finns ingen körningsändring från tidigare versioner av .NET Core.
Orsak till ändringen
.NET-fjärrkommunikation är en äldre teknik. Det gör det möjligt att instansiera ett objekt i en annan process (eventuellt även på en annan dator) och interagera med det objektet som om det vore en vanlig, pågående .NET-objektinstans. .NET-fjärrkommunikationsinfrastrukturen finns bara i .NET Framework 2.x –4.x. .NET Core- och .NET 5- och senare versioner har inte stöd för .NET-fjärrkommunikation, och api:erna för fjärrkommunikation finns antingen inte eller utlöser alltid undantag på dessa körningar.
För att hjälpa utvecklare att komma bort från dessa API:er döljer vi valda fjärrkommunikationsrelaterade API:er. Dessa API:er kan tas bort helt i en framtida version av .NET.
Version introducerad
.NET 5.0
Rekommenderad åtgärd
Överväg att använda WCF- eller HTTP-baserade REST-tjänster för att kommunicera med objekt i andra program eller mellan datorer. Mer information finns i .NET Framework-tekniker som inte är tillgängliga på .NET Core.
Om du måste fortsätta att använda föråldrade API:er kan du utelämna varningen
SYSLIB0010
i koden.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.
Du kan också ignorera varningen i projektfilen, vilket inaktiverar varningen för alla källfiler i projektet.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below will suppress SYSLIB0010 project-wide --> <NoWarn>$(NoWarn);SYSLIB0010</NoWarn> </PropertyGroup> </Project>
Om du utelämnar
SYSLIB0010
inaktiveras endast varningar om api-obsoletion för fjärrkommunikation. Inga andra varningar inaktiveras. Dessutom ändrar det inte det hårdkodade körningsbeteendet för att alltid kasta PlatformNotSupportedException.