.NET 9 - BinaryFormatter移除

1.简单介绍

.NET 9 SDK正式版已经发布, 下载地址是.NET9

同时.NET Conf 2024 大会已经从2024-11-13开始了,感觉Aspire和AI的内容相对挺多的,主题分享演示时候打开的网站大部分都是Blazor制作的。

这次.NET Conf 2024老师也再次说明了一下,

BinarryFormatter is inherely insecure, stop using it

note, BinaryFormatter 存在remote code execution的安全问题

BinaryFormatter 从.NET8开始,已经被标记为Obsolete。.NET9开始已经把BinaryFormatter移除

这边简单记录一下BinaryFormatter在.NET8和.NET9运行的情况

2.具体说明

假定有一个Person类

2.1 .NET8中的BinaryFormatter

2.1.1 修改项目配置文件前

在Visual Studio中编写序列化的代码,发现BinaryFormatter有如下标记

表示BinaryFormatter已经Obsolete了

直接编译代码,是报错的。

2.1.2 修改项目配置文件

这时如果想让代码编译通过且运行正常,需要在项目文件中加上如下配置

复制代码
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>

加上上述的配置后,BinaryFormatter的状态如下,并且编译不会报错,但是有Obsolete警告出现

note, 修改配置之后,项目能运行了,不过BinaryFormatter不建议使用

2.2 .NET 9 的中BinaryFormatter

2.2.1 修改项目配置文件前

未修改项目配置文件时候和.NET8一样的, 编译有报错

2.2.2 修改项目配置文件

如果要恢复正常运行,则需要修改项目配置文件,

1)需要加上配置

复制代码
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>

2)并且安装nuget package(insecure) - System.Runtime.Serialization.Formatters

如果不安装package,运行项目会出现下错误,

修改后的配置如下图所示,

修改了上面两个配置之后,再次编译项目,发现能编译通过,

不过有BinaryFormatter Obsolete的警告出现

下面是代码编译之后的图片

note, 修改配置之后,项目能运行了,不过BinaryFormatter不建议使用

3.总结

本文简单尝试了一下BinaryFormatter在.NET8和.NET9中的状态。正常项目中,不建议使用。

本文如果哪里有错误的地方,麻烦告之,谢谢谢谢!

相关推荐
笑非不退34 分钟前
C# c++ 实现程序开机自启动
开发语言·c++·c#
许泽宇的技术分享4 小时前
当AI Agent遇上.NET:微软Agent Framework的架构奥秘与实战启示
人工智能·microsoft·.net
周杰伦fans4 小时前
[特殊字符] 代理模式超详细讲解 ——.NET
数据库·c#·代理模式
用户8356290780515 小时前
C# 高效生成 Word 表格:复杂表格创建实战指南
后端·c#
屠夫5 小时前
C# LINQ
c#
SEO-狼术6 小时前
DevExpress DXperience Crack
.net
光头闪亮亮7 小时前
电子发票解析工具-c#桌面应用开发-DataGridView表格控件使用详解
c#
周杰伦fans7 小时前
C# 中的 `Hashtable`
开发语言·c#
lingggggaaaa8 小时前
免杀对抗——C2远控篇&PowerShell&有无文件落地&C#参数调用&绕AMSI&ETW&去混淆特征
c语言·开发语言·笔记·学习·安全·microsoft·c#
咩图8 小时前
WPF+Prism8.0.0.1909+C#创建一个桌面程序
c#·wpf·prism