已在大多数项目类型中禁用 BinaryFormatter
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)