Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Serialize и Deserialize методы в BinaryFormatter, Formatter и IFormatter теперь считаются устаревшими и вызовут предупреждение. Кроме того, BinaryFormatter сериализация запрещена по умолчанию для приложений ASP.NET.
Замечание
В .NET 7 затронутые API объявлены устаревшими как ошибка. Дополнительные сведения см. в разделе API сериализации BinaryFormatter, которые приводят к ошибкам компилятора.
Описание изменения
Из-за уязвимостей безопасности в BinaryFormatter, следующие методы теперь устарели и вызывают предупреждение во время компиляции с идентификатором SYSLIB0011. Кроме того, в приложениях ASP.NET Core 5.0 и более поздних версий они будут генерировать исключение NotSupportedException, если веб-приложение не включило повторно функциональность BinaryFormatter.
Следующие методы сериализации также устарели и создают предупреждение SYSLIB0011, но не имеют изменений в поведении:
- Formatter.Serialize(Stream, Object)
- Formatter.Deserialize(Stream)
- IFormatter.Serialize(Stream, Object)
- IFormatter.Deserialize(Stream)
Представленная версия
5,0
Причина изменения
Эти методы помечены как устаревшие в рамках усилий по уменьшению использования BinaryFormatter в экосистеме .NET.
Рекомендуемое действие
Остановите использование BinaryFormatter в коде. Вместо этого рекомендуется использовать JsonSerializer или XmlSerializer. Дополнительные сведения см. в руководстве по безопасности BinaryFormatter.
Вы можете временно подавить BinaryFormatter предупреждение времени компиляции, которое является
SYSLIB0011. Перед выбором этого параметра рекомендуется тщательно оценить риски в коде. Самый простой способ подавления предупреждений — окружить каждую точку вызова директивами#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 }Вы также можете отключить предупреждение в файле проекта.
<PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net5.0</TargetFramework> <!-- Disable "BinaryFormatter is obsolete" warnings for entire project --> <NoWarn>$(NoWarn);SYSLIB0011</NoWarn> </PropertyGroup>Если вы подавляете предупреждение в файле проекта, предупреждение подавляется для всех файлов кода в проекте. Подавление
SYSLIB0011не подавляет предупреждения, вызванные использованием других устаревших API.Чтобы продолжить использование BinaryFormatter в ASP.NET приложениях, его можно повторно включить в файле проекта. Однако настоятельно рекомендуется не делать этого. Дополнительные сведения см. в руководстве по безопасности BinaryFormatter.
<PropertyGroup> <TargetFramework>net5.0</TargetFramework> <!-- Warning: Setting the following switch is *NOT* recommended in web apps. --> <EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization> </PropertyGroup>
Дополнительные сведения о рекомендуемых действиях см. в разделе «Устранение ошибок устаревания и отключения BinaryFormatter».
Затронутые API
- 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)