Compartir a través de


Las API de comunicación remota están obsoletas

Algunas API relacionadas con la comunicación remota se marcan como obsoletas y generan una SYSLIB0010 advertencia en tiempo de compilación. Estas API se pueden quitar en una versión futura de .NET.

Descripción del cambio

Las siguientes API de comunicación remota están marcadas como obsoletas.

Interfaz de Programación de Aplicaciones (API) Marcado como obsoleto 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 en la comunicación remota de .NET. En .NET Core 2.x- 3.x, estos métodos siempre lanzan un PlatformNotSupportedException en tiempo de ejecución.

En .NET 5 y versiones posteriores, los métodos GetLifetimeService() y InitializeLifetimeService() están marcados como obsoletos como advertencia, pero siguen produciendo una PlatformNotSupportedException excepción en tiempo de ejecución.

// MemoryStream, like all Stream instances, subclasses MarshalByRefObject.
MemoryStream stream = new MemoryStream();
// Throws PlatformNotSupportedException; also produces warning SYSLIB0010.
obj.InitializeLifetimeService();

Este es un cambio que solo se realiza durante el tiempo de compilación. No hay ningún cambio en tiempo de ejecución de 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 un equipo diferente) e interactuar con ese objeto como si fuera una instancia de objeto .NET normal y en proceso. La infraestructura de comunicación remota de .NET solo existe en .NET Framework 2.x - 4.x. .NET Core y .NET 5 y versiones posteriores no son compatibles con la comunicación remota de .NET y las API de comunicación remota no existen o siempre inician excepciones en estos entornos de ejecución.

Para ayudar a los desarrolladores a alejarse de estas API, estamos obsolesciando las API relacionadas con la comunicación remota seleccionadas. Estas API se pueden quitar completamente en una versión futura de .NET.

Versión introducida

.NET 5.0

  • 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, consulte Tecnologías de .NET Framework no disponibles en .NET Core.

  • Si debe seguir usando las API obsoletas, puede suprimir la advertencia en el código 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.
    

    También puede suprimir la advertencia en el archivo del proyecto, que deshabilita la advertencia para todos los archivos de origen 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 deshabilita ninguna otra advertencia. Además, no cambia el comportamiento de tiempo de ejecución codificado de siempre lanzar PlatformNotSupportedException.

Las APIs afectadas