Las API de comunicación remota están obsoletas
Algunas API relacionadas con la comunicación remota se han marcado como obsoletas y generan una advertencia SYSLIB0010
en tiempo de compilación. Estas API podrían eliminarse en una próxima versión de .NET.
Descripción del cambio
Las siguientes API de comunicación remota se han marcado como obsoletas.
API | Marcada como obsoleta en... |
---|---|
MarshalByRefObject.GetLifetimeService() | 5.0 RC1 |
MarshalByRefObject.InitializeLifetimeService() | 5.0 RC1 |
En .NET Framework 2.x-4.x, los métodos GetLifetimeService() y InitializeLifetimeService() controlan la duración de las instancias implicadas con .NET Remoting. En .NET Core 2.x-3.x, estos métodos siempre producen una PlatformNotSupportedException en tiempo de ejecución.
En .NET 5 y versiones posteriores, los métodos GetLifetimeService() y InitializeLifetimeService() se han marcado como obsoletos como advertencia, pero siguen produciendo una excepción PlatformNotSupportedException en tiempo de ejecución.
// MemoryStream, like all Stream instances, subclasses MarshalByRefObject.
MemoryStream stream = new MemoryStream();
// Throws PlatformNotSupportedException; also produces warning SYSLIB0010.
obj.InitializeLifetimeService();
Se trata de un cambio solo en tiempo de compilación. No hay ningún cambio en tiempo de ejecución con respecto a versiones anteriores de .NET Core.
Motivo del cambio
.NET Remoting es una tecnología heredada. Permite crear instancias de un objeto en otro proceso (potencialmente incluso en otra máquina) e interactuar con ese objeto como si fuera una instancia de objeto .NET normal en proceso. La infraestructura de .NET Remoting solo existe en .NET Framework 2.x-4.x. .NET Core y .NET 5 y versiones posteriores no tienen compatibilidad con .NET Remoting, y las API de comunicación remota o no existen o siempre producen excepciones en estos entornos de ejecución.
Para ayudar a los desarrolladores a apartarse de estas API, se están marcando como obsoletas API seleccionadas relacionadas con la comunicación remota. Estas API podrían eliminarse por completo en una próxima versión de .NET.
Versión introducida
.NET 5.0
Acción recomendada
Considere la posibilidad de usar servicios REST basados en WCF o HTTP para comunicarse con objetos de otras aplicaciones o entre máquinas. Para obtener más información, vea Tecnologías de .NET Framework no disponibles en .NET Core.
Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia
SYSLIB0010
en el código.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.
También puede suprimir la advertencia en el archivo del proyecto, lo que la deshabilita en todos los archivos de código fuente del proyecto.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- NoWarn below will suppress SYSLIB0010 project-wide --> <NoWarn>$(NoWarn);SYSLIB0010</NoWarn> </PropertyGroup> </Project>
La supresión de
SYSLIB0010
solo deshabilita las advertencias de obsolescencia de la API de comunicación remota. No se deshabilita ninguna otra advertencia. Además, no cambia el comportamiento codificado en tiempo de ejecución de producir siempre una PlatformNotSupportedException.