C#开发WinForm用DLL时System.Drawing.Bitmap找不到报错CS1069如何解决
你找到的解决方案完全正确,这里补充下报错的底层原因和相关注意事项,方便其他遇到同类问题的开发者参考:
报错原因
从.NET Core 3.0版本开始,微软将原本内置在System.Drawing命名空间下的图形相关类型(包括你用到的Bitmap、Color等)全部拆分到了独立的NuGet包System.Drawing.Common中,不再作为.NET基础运行时的默认组成部分,所以项目未安装这个包时就会触发CS1069类型找不到的报错。
解决步骤
- 方式一:打开Visual Studio的NuGet包管理器控制台,直接执行命令:
Install-Package System.Drawing.Common - 方式二:右键你的DLL项目,选择「管理NuGet程序包」,在浏览页搜索
System.Drawing.Common点击安装即可 - 安装完成后确认代码头部已经添加命名空间引用
using System.Drawing;,重新编译就能正常运行
注意事项
System.Drawing.Common仅对Windows系统提供原生支持,如果你后续需要把DLL适配到Linux、MacOS等非Windows平台,可以换用ImageSharp、SkiaSharp等跨平台图形处理库,你当前是Windows Form项目使用,不存在兼容性问题。
问题参考内容
原始代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; namespace gdll { public class Class1 { private Bitmap DoGray(Bitmap bmp) { for (int i = 0; i < bmp.Height - 1; i++) { for (int j = 0; j < bmp.Width - 1; j++) { int value = (bmp.GetPixel(j, i).R + bmp.GetPixel(j, i).G + bmp.GetPixel(j, i).B) / 3; Color clr; clr = Color.FromArgb(value, value, value); bmp.SetPixel(j, i, clr); } } return bmp; } } }
原始报错信息
CS1069 The type name 'Bitmap' could not be found in the namespace 'System.Drawing'. This type has been forwarded to assembly 'System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' Consider adding a reference to that assembly.
报错翻译:
CS1069:在命名空间
System.Drawing中找不到类型名称Bitmap。该类型已被转发到程序集System.Drawing.Common, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51,请考虑添加对该程序集的引用。
内容的提问来源于stack exchange,提问作者user16815856
相关产品推荐
相关产品推荐

