.NET 9 重大变更:BinaryFormatter 核心实现被移除并始终抛出异常

.NET 9 重大变更:BinaryFormatter 核心实现被移除并始终抛出异常

docs This repository contains .NET Documentation. docs 项目地址: https://gitcode.com/gh_mirrors/docs2/docs

背景介绍

在 .NET 生态系统中,BinaryFormatter 长期以来一直是开发者进行二进制序列化的主要工具之一。然而,随着安全意识的提升和技术的发展,微软决定在 .NET 9 中彻底移除其核心实现。这一决定并非突然,而是经过多个版本逐步淘汰计划的结果。

变更内容

从 .NET 9 Preview 6 开始,System.Runtime.Serialization.Formatters.Binary.BinaryFormatter 的核心实现已被完全移除。现在,任何尝试创建 BinaryFormatter 实例或使用其序列化/反序列化方法的操作都会抛出异常。

变更前后对比

旧行为

  • 可以创建 BinaryFormatter 实例
  • 能够正常进行对象的序列化和反序列化操作
  • 虽然从 .NET 5 开始已被标记为过时,但仍可通过配置启用

新行为

  • 尝试创建 BinaryFormatter 实例会立即抛出异常
  • 所有序列化/反序列化操作都会失败
  • 之前用于启用 BinaryFormatter 的配置选项已被移除

变更原因

这一变更主要基于以下安全考虑:

  1. 安全问题BinaryFormatter 的设计存在根本性安全缺陷,容易成为攻击媒介
  2. 不可控风险:它允许执行任意代码,无法通过简单修补解决安全问题
  3. 现代替代方案:已有更安全、更高效的序列化方案可供选择

影响范围

这一变更会影响所有使用 BinaryFormatter 的 .NET 9 应用程序,特别是:

  • 使用二进制序列化保存应用状态的程序
  • 依赖 BinaryFormatter 进行进程间通信的系统
  • 需要持久化复杂对象图的遗留代码

迁移建议

1. 评估替代方案

根据你的具体需求,可以考虑以下替代方案:

  • JSONSystem.Text.JsonNewtonsoft.Json 用于简单数据结构
  • XMLSystem.Xml.Serialization 用于需要人类可读格式的场景
  • Protocol Buffers:Google 的高效二进制格式,适合性能敏感场景
  • MessagePack:另一种高效的二进制序列化格式

2. 迁移步骤

  1. 代码审计:查找项目中所有使用 BinaryFormatter 的地方
  2. 数据兼容性:评估现有序列化数据的迁移路径
  3. 逐步替换:按模块或功能逐步替换序列化方案
  4. 测试验证:确保新方案在所有边界条件下表现正常

3. 特殊情况处理

如果确实需要继续使用 BinaryFormatter(例如维护遗留系统),可以通过以下方式:

  1. 使用第三方提供的 BinaryFormatter 实现包
  2. 明确了解并接受相关安全风险
  3. 实施额外的安全措施来缓解潜在威胁

技术细节

被移除的核心功能包括:

  • BinaryFormatter 类的所有公共构造函数
  • SerializeDeserialize 方法
  • 所有相关的配置开关和兼容性设置

总结

BinaryFormatter 的移除是 .NET 平台安全加固的重要一步。虽然这会给部分项目带来迁移成本,但从长远来看,采用更现代的序列化方案将提高应用程序的安全性和可维护性。建议开发者尽早规划迁移工作,避免在升级到 .NET 9 时遇到兼容性问题。

docs This repository contains .NET Documentation. docs 项目地址: https://gitcode.com/gh_mirrors/docs2/docs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晏灵昀Odette

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值