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.
Les méthodes Serialize et Deserialize sur BinaryFormatter, Formatter et IFormatter sont désormais obsolètes en tant qu’avertissement. En outre, BinaryFormatter la sérialisation est interdite par défaut pour les applications ASP.NET.
Remarque
Dans .NET 7, les API affectées sont obsolètes en tant qu’erreur. Pour plus d’informations, consultez les API de sérialisation BinaryFormatter qui produisent des erreurs de compilateur.
Description de la modification
En raison des vulnérabilités de sécurité dans BinaryFormatter, les méthodes suivantes sont désormais obsolètes et produisent un avertissement au moment de la compilation avec l’ID SYSLIB0011. En outre, dans les applications ASP.NET Core 5.0 et ultérieures, ils lèvent un NotSupportedException, sauf si l’application web dispose de fonctionnalités BinaryFormatter réactivées.
Les méthodes de sérialisation suivantes sont également obsolètes et produisent un avertissement SYSLIB0011, mais n’ont aucun changement comportemental :
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Version introduite
5,0
Raison de la modification
Ces méthodes sont marquées comme obsolètes dans le cadre d’un effort visant à réduire l’utilisation dans BinaryFormatter l’écosystème .NET.
Action recommandée
Arrêtez d’utiliser BinaryFormatter dans votre code. Au lieu de cela, envisagez d’utiliser JsonSerializer ou XmlSerializer. Pour plus d’informations, consultez le guide de sécurité BinaryFormatter.
Vous pouvez supprimer temporairement l’avertissement au moment de la compilation BinaryFormatter, qui est
SYSLIB0011. Nous vous recommandons d’évaluer soigneusement votre code pour les risques avant de choisir cette option. Le moyen le plus simple de supprimer les avertissements consiste à entourer l'emplacement d'appel individuel avec des directives#pragma.// Now read the purchase order back from disk using (var readStream = new FileStream("myfile.bin", FileMode.Open)) { var formatter = new BinaryFormatter(); #pragma warning disable SYSLIB0011 return (PurchaseOrder)formatter.Deserialize(readStream); #pragma warning restore SYSLIB0011 }Vous pouvez également supprimer l’avertissement dans le fichier projet.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>Si vous supprimez l’avertissement dans le fichier projet, l’avertissement est supprimé pour tous les fichiers de code du projet.
SYSLIB0011La suppression ne supprime pas les avertissements provoqués par l’utilisation d’autres API obsolètes.Pour continuer à utiliser BinaryFormatter dans ASP.NET applications, vous pouvez le réactiver dans le fichier projet. Toutefois, il est fortement recommandé de ne pas le faire. Pour plus d’informations, consultez le guide de sécurité BinaryFormatter.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Pour plus d'informations sur les actions recommandées, consultez la résolution des erreurs liées à l'obsolescence et à la désactivation de "BinaryFormatter".
API affectées
- 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)