.NET Standard类库项目中无法使用System.Drawing类的原因及解决办法
问题原因
- .NET Standard的基础类库默认不包含System.Drawing相关实现。System.Drawing最初是.NET Framework中基于Windows GDI+封装的图形API,没有被纳入.NET Standard的默认统一接口规范,因此新建.NET Standard类库时无法直接使用。
- 后续官方将System.Drawing的实现拆分到了独立NuGet包中,未被项目默认引用,因此会出现类型找不到的编译错误。
- 额外注意:System.Drawing.Common从.NET 6版本开始仅支持Windows系统,若项目需要跨Linux、macOS运行,使用该包会抛出平台不支持异常。
修复方案
方案1:引用官方System.Drawing.Common包(仅适用于Windows运行场景)
- 右键你的.NET Standard类库项目,选择「管理NuGet程序包」
- 搜索并安装
System.Drawing.Common包,安装时注意选择和你项目.NET Standard版本兼容的包版本:- .NET Standard 2.0 支持4.5.0及以上版本的System.Drawing.Common
- .NET Standard 2.1 支持5.0.0及以上版本
- 安装完成后重新生成项目,即可正常识别System.Drawing命名空间下的所有类型。
方案2:使用跨平台图形库(适用于需跨平台运行的场景)
如果你的类库需要支持跨Linux、macOS运行,推荐用跨平台兼容的图形库替代System.Drawing,以下两个库均原生支持.NET Standard:
SixLabors.ImageSharp:全托管跨平台图形库,无需依赖原生运行时,API设计贴合.NET开发者习惯,支持绝大多数常规图像处理操作SkiaSharp:基于谷歌Skia图形引擎的.NET封装,性能优异,支持多平台渲染,功能覆盖更全面
内容的提问来源于stack exchange,提问作者Kermitaurus
相关产品推荐
相关产品推荐

