Partager via


Les API de sérialisation de BinaryFormatter produisent des erreurs du compilateur

Dans le cadre du plan de dépréciation à long terme de BinaryFormatter, nous continuons à retirer les fonctionnalités BinaryFormatter de nos bibliothèques et détourner les développeurs de l’utilisation du type. À compter de .NET 7, les appels aux API suivantes produisent des erreurs de compilation dans tous les types de projets C# et Visual Basic :

Comportement précédent

Depuis .NET 5, l’utilisation des méthodes affectées Serialize et Deserialize génère un avertissement du compilateur avec l’ID SYSLIB0011. Pour plus d’informations, consultez les méthodes de sérialisation BinaryFormatter sont obsolètes et interdites dans les applications ASP.NET (.NET 5).

L'utilisation de l'événement Exception.SerializeObjectState n'a pas produit d'erreur.

Nouveau comportement

À compter de .NET 7, l’utilisation de l’une des API affectées dans le code génère une erreur de compilateur avec le même ID. SYSLIB0011 Votre projet sera affecté s’il répond à tous les critères suivants :

  • Il s’agit d’un projet C# ou Visual Basic.
  • Il cible net7.0 ou ultérieur.
  • Il appelle directement l’une des API affectées.
  • Il ne supprime pas déjà le SYSLIB0011 code d’avertissement.

Version introduite

.NET 7

Type de changement cassant

Cette modification peut affecter la compatibilité source .

Raison de la modification

Dans le cadre du plan de dépréciation à long terme de BinaryFormatter, nous continuons à retirer les fonctionnalités BinaryFormatter de nos bibliothèques et détourner les développeurs de l’utilisation du type.

La meilleure décision consiste à migrer loin de BinaryFormatter en raison de ses failles de sécurité et de fiabilité. BinaryFormatter peut être supprimé de .NET dans une version ultérieure. L’équipe de bibliothèques .NET a déjà pris une position selon laquelle les types récents tels que System.Half et System.DateOnly ne seront pas compatibles avec BinaryFormatter.

Si vous devez supprimer les erreurs, vous pouvez le faire en suivant les instructions de l’article d’obsoletion d’origine. Vous pouvez également désactiver l'erreur à l'échelle du projet en définissant une propriété de projet qui la convertit en avertissement (pour correspondre au comportement de .NET 5/6).

Avertissement

La définition de cette propriété peut modifier le comportement de l’hôte. Voir <EnableUnsafeBinaryFormatterSerialization> propriété.

<PropertyGroup>
    ...
    <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

Remarque

Si votre projet se compile avec des « avertissements en tant qu’erreurs » activés, la compilation échoue toujours. (Cela correspond au comportement fourni dans les kits SDK .NET 5 et .NET 6.) Si c’est le cas, vous devez toujours supprimer l’avertissement dans la source ou dans l’élément SYSLIB0011 de <NoWarn> votre fichier projet.

Propriété <EnableUnsafeBinaryFormatterSerialization>

La <EnableUnsafeBinaryFormatterSerialization propriété a été introduite dans .NET 5. Avec .NET 7, le comportement de ce commutateur a changé pour contrôler à la fois le comportement de compilation et d’exécution de l’hôte . La signification de ce commutateur diffère en fonction du type de projet, comme décrit dans le tableau suivant.

Type de projet Propriété définie sur true Propriété définie sur false Propriété omise
Composant partagé/bibliothèque1 Les API affectées sont obsolètes en tant qu’avertissement. La compilation réussit, sauf si vous avez activé les « avertissements en tant qu’erreurs » pour votre application ou si vous avez supprimé le SYSLIB0011 code d’avertissement. Les API affectées sont obsolètes en tant qu’erreur et les appels de votre code à ces API échouent au moment de la compilation, sauf si l’erreur est supprimée. (Identique à pour false.)
Applications Blazor et MAUI2 Les appels vers BinaryFormatter devront échouer au moment de l’exécution. Les appels vers BinaryFormatter devront échouer au moment de l’exécution. Les appels vers BinaryFormatter devront échouer au moment de l’exécution.
Application ASP.NET Les API affectées sont obsolètes en tant qu’avertissement. La compilation réussit, sauf si vous avez activé les « avertissements en tant qu’erreurs » pour votre application ou si vous avez supprimé le SYSLIB0011 code d’avertissement. Le runtime autorise les appels vers BinaryFormatter, que l’appel provient de votre code ou d’une dépendance que vous consommez. Les API affectées sont obsolètes en tant qu’erreur et les appels de votre code à ces API échouent au moment de la compilation, sauf si l’erreur est supprimée. Le runtime interdit les appels à BinaryFormatter, que l’appel provient de votre code ou d’une dépendance que vous consommez. (Identique à pour false.)
Applications de bureau et tous les autres types d’applications Les API affectées sont obsolètes en tant qu’avertissement. La compilation réussit, sauf si vous avez activé les « avertissements en tant qu’erreurs » pour votre application ou si vous avez supprimé le SYSLIB0011 code d’avertissement. Le runtime autorise les appels vers BinaryFormatter, que l’appel provient de votre code ou d’une dépendance que vous consommez. Les API affectées sont obsolètes en tant qu’erreur et les appels de votre code à ces API échouent au moment de la compilation, sauf si l’erreur est supprimée. Le runtime interdit les appels à BinaryFormatter, que l’appel provient de votre code ou d’une dépendance que vous consommez. Les API affectées sont obsolètes en tant qu’erreur et les appels de votre code à ces API échouent au moment de la compilation, sauf si l’erreur est supprimée. Le runtime autorise les appels vers BinaryFormatter, que l’appel provient de votre code ou d’une dépendance que vous consommez.

1La stratégie d’exécution est contrôlée par l’hôte de l’application. Les appels vers BinaryFormatter pourraient encore échouer lors de l'exécution même si <EnableUnsafeBinaryFormatterSerialization> est réglé sur true dans le fichier projet de votre bibliothèque. Les bibliothèques ne peuvent pas remplacer la stratégie d’exécution de l’hôte d’application.

2 Les runtimes Blazor et MAUI interdisent les appels à BinaryFormatter. Quelle que soit la valeur que vous définissez pour <EnableUnsafeBinaryFormatterSerialization>, les appels échouent lors de l’exécution. N’appelez pas ces API à partir d’applications Blazor ou MAUI ou de bibliothèques destinées à être consommées par les applications Blazor ou MAUI.

API affectées

Voir aussi