System.Drawing.Common与System.Drawing的差异及安装后功能未显的技术问询
关于System.Drawing.Common与传统System.Drawing的说明
二者的关系
- 传统
System.Drawing是.NET Framework的内置组件,仅支持Windows平台。 System.Drawing.Common是它在.NET Core/.NET 5+生态下的迁移适配版本,本质是同一绘图API的跨平台迭代版,并非完全独立的新组件。
为何作为独立NuGet包存在
-.NET Core/.NET 5+采用模块化设计,不再像.NET Framework那样把所有基础库打包进框架,而是让开发者按需安装NuGet包,以此减少应用体积、提升轻量化程度。
- 原
System.Drawing依赖Windows平台的GDI+,System.Drawing.Common在保留原有API的基础上,对Linux、macOS等非Windows平台做了适配(依赖第三方libgdiplus库),作为独立包可以更灵活地更新跨平台兼容逻辑、修复Bug。
独有特性(相比.NET Framework的System.Drawing)
- 跨平台支持:可在Linux、macOS环境下正常运行绘图逻辑,传统
System.Drawing仅能在Windows上工作。 - 适配.NET新版性能特性:比如支持
Span<T>、Memory<T>等高性能内存类型,优化了大数据量绘图操作的内存效率。 - 跟进.NET新版安全标准:修复了.NET Framework版本中的部分安全漏洞,适配了新版框架的权限控制逻辑。
仅System.Drawing.Common能实现的功能示例
比如在Linux服务器后端生成图片并保存:
using System.Drawing; using System.Drawing.Imaging; // 需提前在Linux环境安装libgdiplus依赖 using var bitmap = new Bitmap(200, 200); using var graphics = Graphics.FromImage(bitmap); graphics.Clear(Color.White); graphics.DrawString("跨平台绘图测试", new Font("Arial", 12), Brushes.Black, new PointF(10, 10)); bitmap.Save("/tmp/test.png", ImageFormat.Png);
这段代码在.NET Framework的System.Drawing中无法在Linux上执行,而System.Drawing.Common配合libgdiplus可以正常完成图片生成与保存。
另外,在.NET 6+的ASP.NET Core应用中,System.Drawing.Common可直接在后端生成验证码、图片缩略图等资源,无需依赖Windows服务器环境。
内容的提问来源于stack exchange,提问作者kurmi
相关产品推荐
相关产品推荐

