Partager via


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 SYSLIB0010 avertissement 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 (Interface de Programmation d'Applications) 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 le remoting .NET. Dans .NET Core 2.x- 3.x, ces méthodes lèvent toujours un PlatformNotSupportedException lors de l'exécution.

Dans .NET 5 et versions ultérieures, les méthodes GetLifetimeService() et InitializeLifetimeService() sont marquées comme obsolètes comme avertissement, mais continuent à lever un PlatformNotSupportedException à 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’existe aucune modification du runtime par rapport aux versions précédentes de .NET Core.

Raison de la modification

La communication à distance .NET est une technologie héritée. Il permet d’instancier un objet dans un autre processus (potentiellement sur un autre ordinateur) et d’interagir avec cet objet comme s’il s’agissait d’une instance d’objet .NET ordinaire. L’infrastructure de communication à distance .NET existe uniquement dans .NET Framework 2.x - 4.x. .NET Core et .NET 5 et les versions plus récentes n'ont pas de prise en charge de la technologie .NET Remoting, et les API de remoting n'existent pas ou lèvent toujours des exceptions dans ces environnements d'exécution.

Pour déconseiller l'utilisation de ces interfaces de programmation (API), nous rendons obsolètes certaines API liées à la communication à distance. Ces API peuvent ê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 sur plusieurs ordinateurs. Pour plus d’informations, consultez les technologies .NET Framework non disponibles sur .NET Core.

  • Si vous devez continuer à utiliser les API obsolètes, vous pouvez supprimer l’avertissement dans le SYSLIB0010 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. Elle ne désactive aucun autre avertissement. De plus, cela ne modifie pas le comportement d'exécution codé en dur qui consiste toujours à lever PlatformNotSupportedException.

API affectées