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

另请参阅