Les API de communication à distance sont obsolètes

Certaines API liées à la communication à distance sont marquées comme obsolètes et génèrent un avertissement SYSLIB0010 au moment de la compilation. Ces API peuvent être supprimées dans une version ultérieure de .NET.

Description de la modification

Les API de communication à distance suivantes sont marquées comme obsolètes.

API Marqué comme obsolète dans...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

Dans .NET Framework 2.x - 4.x, les méthodes GetLifetimeService() et InitializeLifetimeService() contrôlent la durée de vie des instances impliquées dans la communication à distance .NET. Dans .NET Core 2.x- 3.x, ces méthodes lèvent toujours PlatformNotSupportedException au moment de l’exécution.

Dans .NET 5 et versions ultérieures, les méthodes GetLifetimeService() et InitializeLifetimeService() sont marquées comme obsolètes en tant qu’avertissement, mais continuent à lever PlatformNotSupportedException au moment de l’exécution.

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

Il s’agit d’une modification au moment de la compilation uniquement. Il n’y a aucun changement au moment de l’exécution par rapport aux versions précédentes de .NET Core.

Raison du changement

La communication à distance .NET est une technologie héritée. Cela permet d’instancier un objet dans un autre processus (potentiellement même sur une autre machine) et d’interagir avec cet objet comme s’il s’agissait d’une instance d’objet .NET ordinaire et in-process. L’infrastructure de communication à distance .NET existe uniquement dans .NET Framework 2.x - 4.x. .NET Core et .NET 5 et versions ultérieures n’ont pas de prise en charge de la communication à distance .NET, et les API de communication à distance n’existent pas ou lèvent toujours des exceptions sur ces runtimes.

Pour encourager les développeurs à abandonner ces API, nous rendons certaines API liées à la communication à distance obsolètes. Ces API pourraient être supprimées entièrement dans une version ultérieure de .NET.

Version introduite

.NET 5.0

  • Envisagez d’utiliser des services REST basés sur WCF ou HTTP pour communiquer avec des objets dans d’autres applications ou entre des machines. Pour plus d’informations, consultez Technologies .NET Framework non disponibles sur .NET Core.

  • Si vous devez continuer à utiliser les API obsolètes, vous pouvez supprimer l’avertissement SYSLIB0010 dans le code.

    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.
    

    Vous pouvez également supprimer l’avertissement dans votre fichier projet, ce qui désactive l’avertissement pour tous les fichiers sources du projet.

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

    La suppression de SYSLIB0010 désactive uniquement les avertissements d’obsolescence de l’API de communication à distance. Cela ne désactive aucun autre avertissement. En outre, cela ne modifie pas le comportement d’exécution codé en dur de toujours lever PlatformNotSupportedException.

API affectées