为何.NET Standard 2.0项目.resx导入.png生成byte[]而非System.Drawing.Bitmap
问题根因
- .NET Standard 2.0作为跨平台基础类库规范,默认没有绑定Windows专有程序集
System.Drawing的相关依赖,强类型资源生成器的默认策略会规避平台专属API依赖,所以将图片资源统一序列化为byte[]类型返回。而.NET Framework 4.8是Windows专属框架,内置GDI+组件支持,resx生成器默认会将图片资源映射为System.Drawing.Bitmap类型。 - Visual Studio 2019针对.NET Standard项目的ResX代码生成器(
ResXFileCodeGenerator/PublicResXFileCodeGenerator)默认采用跨平台适配逻辑,没有内置System.Drawing.Bitmap的类型自动解析规则,和.NET Framework项目的生成逻辑存在差异。
解决方案
如果你的.NET Standard资源类库仅面向.NET Framework 4.8等Windows专属平台消费,可以按以下步骤修改:
- 给当前.NET Standard 2.0项目安装NuGet包
System.Drawing.Common,选择和你消费端兼容的版本即可 - 打开.resx资源文件,选中对应的.png资源,在属性面板的「类型」选项中手动指定为
System.Drawing.Bitmap,保存后重新生成项目,自动生成的资源属性就会返回Bitmap类型 - 如果需要批量修改,可以直接编辑.resx的XML源码,找到对应图片资源的
<data>节点,补充type属性为:System.Drawing.Bitmap, System.Drawing.Common
注意:如果你的.NET Standard类库后续需要给.NET Core 3.0+、.NET 5+跨平台项目使用,
System.Drawing.Common从.NET 6版本开始仅支持Windows平台,跨平台场景建议替换为ImageSharp等跨平台图像处理库。
内容的提问来源于stack exchange,提问作者Florent
相关产品推荐
相关产品推荐

