API di comunicazione remota obsolete

Alcune API correlate alla comunicazione remota sono contrassegnate come obsolete e generano un avviso SYSLIB0010 in fase di compilazione. Queste API potrebbero essere rimosse in una versione futura di .NET.

Descrizione delle modifiche

Le API di comunicazione remota seguenti sono contrassegnate come obsolete.

API Contrassegnata come obsoleta in...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

In .NET Framework 2.x-4.x, i metodi GetLifetimeService() e InitializeLifetimeService() controllano la durata delle istanze che coinvolgono .NET-Remoting. In .NET Core 2.x-3.x questi metodi generano sempre un'eccezione PlatformNotSupportedException in fase di esecuzione.

In .NET 5 e versioni successive i metodi GetLifetimeService() e InitializeLifetimeService() sono contrassegnati come obsoleti come avviso, ma continuano a generare un'eccezione PlatformNotSupportedException in fase di esecuzione.

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

Questa modifica riguarda solo la fase di compilazione. Non è stata apportata alcuna modifica in fase di esecuzione rispetto alle versioni precedenti di .NET Core.

Motivo della modifica

.NET Remoting è una tecnologia legacy. Consente di creare un'istanza di un oggetto in un altro processo, potenzialmente anche in un computer diverso, e di interagire con tale oggetto come se fosse una normale istanza di oggetto .NET in-process. L'infrastruttura .NET Remoting esiste solo in .NET Framework 2.x-4.x. .NET Core e .NET 5 e versioni successive non supportano .NET Remoting e le API di comunicazione remota non esistono o generano sempre eccezioni in questi runtime.

Per aiutare gli sviluppatori a smettere di usare queste API, stiamo contrassegnando come obsolete alcune API correlate alla comunicazione remota. Queste API potrebbero essere completamente rimosse in una versione futura di .NET.

Versione introdotta

.NET 5.0

  • È consigliabile usare servizi REST basati su HTTP o WCF per comunicare con oggetti in altre applicazioni o tra computer. Per altre informazioni, vedere Tecnologie di .NET Framework non disponibili in .NET Core.

  • Se è necessario continuare a usare le API obsolete, è possibile eliminare l'avviso SYSLIB0010 nel codice.

    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.
    

    È anche possibile eliminare l'avviso nel file di progetto, disabilitandolo così per tutti i file di origine nel progetto.

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

    L'eliminazione di SYSLIB0010 disabilita solo gli avvisi di obsolescenza delle API di comunicazione remota. Non disabilita altri avvisi. Inoltre, non modifica il comportamento hardcoded in fase di esecuzione, che prevede di generare sempre PlatformNotSupportedException.

API interessate