Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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 :
- System.Exception.SerializeObjectState événement
- méthode BinaryFormatter.Serialize
- méthode BinaryFormatter.Deserialize
- méthode Formatter.Serialize(Stream, Object)
- méthode Formatter.Deserialize(Stream)
- méthode IFormatter.Serialize(Stream, Object)
- méthode IFormatter.Deserialize(Stream)
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.0ou ultérieur. - Il appelle directement l’une des API affectées.
- Il ne supprime pas déjà le
SYSLIB0011code 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.
Action recommandée
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
- System.Exception.SerializeObjectState
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize
- System.Runtime.Serialization.Formatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatter.Deserialize(Stream)
- System.Runtime.Serialization.IFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.IFormatter.Deserialize(Stream)