Share via


As APIs de comunicação remota estão obsoletas

Algumas APIs relacionadas à comunicação remota foram marcadas como obsoletas e geram um aviso SYSLIB0010 em tempo de compilação. Essas APIs poderão ser removidas em uma versão futura do .NET.

Descrição das alterações

As APIs de comunicação remota a seguir estão marcadas como obsoletas.

API Marcada como obsoleta em...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

No .NET Framework 2.x – 4.x, os métodos GetLifetimeService() e InitializeLifetimeService() controlam o tempo de vida das instâncias envolvidas com a comunicação remota do .NET. No .NET Core 2.x – 3.x, esses métodos sempre geram uma PlatformNotSupportedException em tempo de execução.

No .NET 5 e nas versões posteriores, os métodos GetLifetimeService() e InitializeLifetimeService() estão marcados como obsoletos como aviso, mas continuam a gerar uma PlatformNotSupportedException em tempo de execução.

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

Essa é uma alteração somente de tempo de compilação. Não há nenhuma alteração em tempo de execução das versões anteriores do .NET Core.

Motivo da alteração

A comunicação remota do .NET é uma tecnologia herdada. Ela permite criar uma instância de um objeto em outro processo (até mesmo em um computador diferente) e interagir com esse objeto como se ele fosse uma instância de objeto do .NET comum em processo. A infraestrutura de comunicação remota do .NET só existe no .NET Framework 2.x – 4.x. O .NET Core e o .NET 5 e versões posteriores não são compatíveis com a comunicação remota do .NET e as APIs de comunicação remota não existem ou sempre geram exceções nesses tempos de execução.

Para ajudar os desenvolvedores a não usarem essas APIs, as APIs selecionadas como relacionadas à comunicação remota estão ficando obsoletas. Essas APIs poderão ser totalmente removidas em uma versão futura do .NET.

Versão introduzida

.NET 5.0

  • Considere usar o WCF ou serviços REST baseados em HTTP para se comunicar com objetos em outros aplicativos ou entre computadores. Para obter mais informações, confira Tecnologias do .NET Framework não disponíveis no .NET Core.

  • Se você precisar continuar a usar as APIs obsoletas, suprima o aviso SYSLIB0010 no 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.
    

    Você também pode suprimir o aviso no arquivo de projeto, o que desabilita o aviso para todos os arquivos de origem no projeto.

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
       <TargetFramework>net5.0</TargetFramework>
       <!-- NoWarn below will suppress SYSLIB0010 project-wide -->
       <NoWarn>$(NoWarn);SYSLIB0010</NoWarn>
      </PropertyGroup>
    </Project>
    

    A supressão de SYSLIB0010 desabilita apenas os avisos de obsolescência de APIs de comunicação remota. Ela não desabilita nenhum outro aviso. Além disso, ela não altera o comportamento em tempo de execução embutido em código de sempre gerar PlatformNotSupportedException.

APIs afetadas