在C#控制台应用中无法使用System.Drawing的问题求助
问题原因
- .NET 5及以上版本(.NET Core系列)中,
System.Drawing不再是框架内置程序集,而是以NuGet包的形式提供。你尝试添加的COM引用是.NET Framework时代System.Drawing导出的类型库,这类CLR程序集导出的COM类型库无法在.NET Core/.NET 5+中重新导入,因此触发MSB3290警告。 - .NET 5+项目结构已简化,原“引用”目录合并为“依赖项”,程序集引用不再通过传统的“程序集”选项添加,而是通过NuGet包管理器安装。
解决方案
正确的做法是安装官方的System.Drawing.Common NuGet包,步骤如下:
- 右键项目下的“依赖项” → 选择“管理NuGet程序包”
- 在“浏览”标签页搜索
System.Drawing.Common,选择与项目框架版本匹配的包(比如.NET 6对应6.x版本),点击“安装”
安装完成后,即可正常使用System.Drawing相关类实现位图导出,示例代码:
using System.Drawing; using System.Drawing.Imaging; namespace BitmapExporter { class Program { static void Main(string[] args) { // 创建指定尺寸的位图 using (var bitmap = new Bitmap(300, 200)) using (var graphics = Graphics.FromImage(bitmap)) { // 执行计算并绘制内容(示例:绘制文本) graphics.Clear(Color.LightBlue); var font = new Font("Segoe UI", 14); graphics.DrawString("计算完成,导出位图", font, Brushes.DarkBlue, new PointF(20, 80)); // 导出为PNG格式 bitmap.Save("calculation_result.png", ImageFormat.Png); } } } }
替代方案
如果项目需要跨平台运行(非Windows环境),或者想避免System.Drawing.Common的兼容性限制,可选用以下现代图形库:
1. SkiaSharp
谷歌Skia图形引擎的.NET绑定,完全跨平台(Windows/macOS/Linux/移动端),支持所有常见位图操作。使用前需安装SkiaSharp NuGet包,示例代码:
using SkiaSharp; namespace SkiaBitmapExporter { class Program { static void Main(string[] args) { using (var bitmap = new SKBitmap(300, 200)) using (var canvas = new SKCanvas(bitmap)) { // 绘制内容 canvas.Clear(SKColors.LightBlue); using (var paint = new SKPaint { Color = SKColors.DarkBlue, TextSize = 14 }) { canvas.DrawText("计算完成,导出位图", 20, 100, paint); } // 导出为PNG using (var stream = new SKFileWStream("skia_result.png")) { bitmap.Encode(stream, SKEncodedImageFormat.Png, 100); } } } } }
2. ImageSharp
纯.NET编写的跨平台图形处理库,API设计更现代化,无原生依赖。使用前需安装SixLabors.ImageSharp NuGet包,示例代码:
using SixLabors.ImageSharp; using SixLabors.ImageSharp.Drawing.Processing; using SixLabors.ImageSharp.Processing; using SixLabors.Fonts; namespace ImageSharpExporter { class Program { static void Main(string[] args) { using (var image = new Image<Rgba32>(300, 200)) { // 绘制内容 image.Mutate(ctx => { ctx.Clear(Color.LightBlue); var font = SystemFonts.CreateFont("Segoe UI", 14); ctx.DrawText("计算完成,导出位图", font, Color.DarkBlue, new PointF(20, 80)); }); // 导出为PNG image.Save("imagesharp_result.png"); } } } }
内容的提问来源于stack exchange,提问作者lionclem
相关产品推荐
相关产品推荐

