现在,这些 BinaryFormatter.Serialize(Stream, Object) 和 BinaryFormatter.Deserialize(Stream) 方法会在几乎所有项目类型(包括控制台应用程序)的运行时引发 NotSupportedException 。
以前的行为
在 .NET 7 中,BinaryFormatter.Serialize(Stream, Object) 方法和 BinaryFormatter.Deserialize(Stream) 方法被标记为已过时,并会在编译时引发错误。 但是,如果应用程序取消了过时,它仍然可以调用方法,并且它们在大多数项目类型(不包括 ASP.NET、WASM 和 MAUI)中正常运行。 例如,API 在控制台应用中正常运行。
新行为
从 .NET 8 开始,受影响的方法在除 Windows 窗体和 WPF 之外的所有项目类型中运行时会引发 NotSupportedException。 API 在所有项目类型(包括 Windows 窗体和 WPF)中继续处于已过时状态(视为错误)。
已引入的版本
.NET 8 预览版 4
破坏性变更的类型
此更改为行为更改。
更改原因
此运行时更改是 BinaryFormatter 过时计划的下一阶段,最终 BinaryFormatter 将从 .NET 中删除。
建议的措施
最佳的行动方案是迁移到其他平台,因为 BinaryFormatter
存在安全性和可靠性缺陷。 有关详细信息,请参阅 首选替代项。
如果需要继续使用 BinaryFormatter
,可以在项目文件中设置兼容性开关以重新启用 BinaryFormatter
功能。 有关详细信息,请参阅 .NET 7 重大变更通知的 建议操作部分。 .NET 8 中继续沿用该兼容性开关。
受影响的 API
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream, Object)
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream)