Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Serialize i Deserialize metody w BinaryFormatter, Formatter i IFormatter są teraz oznaczone jako przestarzałe z ostrzeżeniem.
BinaryFormatter Ponadto serializacja jest domyślnie zabroniona dla ASP.NET aplikacji.
Uwaga / Notatka
Na platformie .NET 7 interfejsy API, których dotyczy problem , są przestarzałe jako błąd. Aby uzyskać więcej informacji, zobacz Interfejsy API serializacji BinaryFormatter generują błędy kompilatora.
Zmień opis
Ze względu na luki w zabezpieczeniach w systemie BinaryFormatternastępujące metody są teraz przestarzałe i generują ostrzeżenie dotyczące czasu kompilacji z identyfikatorem SYSLIB0011. Ponadto w aplikacjach ASP.NET Core 5.0 i nowszych będą zgłaszać NotSupportedException, chyba że aplikacja internetowa ponownie włączyła funkcjonalność BinaryFormatter.
Następujące metody serializacji są również przestarzałe i generują ostrzeżenie SYSLIB0011, ale nie mają zmian behawioralnych:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Wersja wprowadzona
5,0
Przyczyna zmiany
Te metody są oznaczone jako przestarzałe w ramach wysiłku mającego na celu zmniejszenie użycia BinaryFormatter w ekosystemie .NET.
Zalecana akcja
Przestań używać BinaryFormatter w kodzie. Zamiast tego rozważ użycie metody JsonSerializer lub XmlSerializer. Aby uzyskać więcej informacji, zobacz BinaryFormatter security guide (Przewodnik po zabezpieczeniach usługi BinaryFormatter).
Możesz tymczasowo pominąć BinaryFormatter ostrzeżenie o czasie kompilacji, czyli
SYSLIB0011. Zalecamy dokładną ocenę kodu pod kątem ryzyka przed wybraniem tej opcji. Najprostszym sposobem stłumienia ostrzeżeń jest otaczanie miejsc wywołań dyrektywami#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 }Możesz również pominąć ostrzeżenie w pliku projektu.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>Jeśli pominięto ostrzeżenie w pliku projektu, ostrzeżenie zostanie pominięte dla wszystkich plików kodu w projekcie. Pomijanie
SYSLIB0011nie pomija ostrzeżeń spowodowanych użyciem innych przestarzałych interfejsów API.Aby nadal korzystać BinaryFormatter z aplikacji ASP.NET, możesz ją ponownie włączyć w pliku projektu. Jednak zdecydowanie zaleca się, aby tego nie robić. Aby uzyskać więcej informacji, zobacz BinaryFormatter security guide (Przewodnik po zabezpieczeniach usługi BinaryFormatter).
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Aby uzyskać więcej informacji na temat zalecanych czynności, zobacz Rozwiązywanie błędów przestarzałości i błędów wyłączania BinaryFormatter.
Interfejsy API, których dotyczy problem
- 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)