You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5应用加载Bitmap资源时出现BinaryFormatter不支持异常如何解决

问题原因

报错是因为项目资源中存储的位图默认以System.Drawing.Bitmap对象的形式通过BinaryFormatter序列化后存储,读取时需要调用BinaryFormatter反序列化,而.NET 5+默认禁用了BinaryFormatter,所以触发异常。
PDF资源不会报错是因为添加PDF文件到资源时,默认以二进制字节数组格式存储,读取过程不需要触发BinaryFormatter反序列化,因此无异常。

永久修复方案

方案1:修改资源存储格式(最简便)

  • 打开项目资源编辑器,删除原有已添加的Logo位图资源
  • 重新选择「添加→现有文件」,选中你的Logo原始图片文件(png/jpg等格式),此时资源会以byte[]二进制数组格式存储,而非序列化的Bitmap对象
  • 修改调用代码,手动将字节数组转为Bitmap使用:
using var logoStream = new MemoryStream(Properties.Resources.Logo);
using var logoBitmap = new Bitmap(logoStream);
RtfUtility.AppendLogo(result, logoBitmap);

方案2:手动嵌入资源读取

  • 将Logo原始图片文件放入项目指定目录,右键文件选择「属性」,将「生成操作」设置为「嵌入的资源」
  • 代码中直接读取嵌入资源流转为Bitmap使用,完全绕开ResourceManager的BinaryFormatter调用:
var currentAssembly = typeof(Properties.Resources).Assembly;
// 资源路径格式为:项目默认命名空间.文件夹路径.文件名,根据实际情况修改
using var logoStream = currentAssembly.GetManifestResourceStream("Project.Infrastructure.Assets.Logo.png");
using var logoBitmap = new Bitmap(logoStream);
RtfUtility.AppendLogo(result, logoBitmap);

两种方案都完全规避了BinaryFormatter的使用,无需修改项目配置开启BinaryFormatter相关权限,无安全风险,是长期有效的修复方式。

内容的提问来源于stack exchange,提问作者Ian Gordon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:06:02