C#使用notifyIcon编译报Icon类型程序集未引用错误解决方法
两个编译错误的核心原因是项目未正确引用System.Drawing.Icon类型所在的程序集,属于依赖缺失问题,和Designer.cs自动生成的代码本身逻辑无关,按项目类型对应操作即可修复:
修复步骤
.NET Core / .NET 5及以上版本WinForms项目
这类项目从.NET Core 3.0开始,System.Drawing相关能力被拆分到独立NuGet包,默认不会随WinForms项目模板自动引用:
- 右键解决方案资源管理器里的项目「依赖项」节点,选择「管理NuGet程序包」
- 搜索
System.Drawing.Common,安装和你项目当前.NET大版本一致的稳定版本即可 - 安装完成后重新生成项目,错误会直接消失
如果习惯直接编辑项目文件,双击项目名打开csproj编辑界面,添加如下引用即可:
<ItemGroup> <PackageReference Include="System.Drawing.Common" Version="8.0.0" /> <!-- 版本号替换为和你项目.NET版本匹配的正式版即可 --> </ItemGroup>
.NET Framework 传统WinForms项目
这类项目的System.Drawing属于框架内置程序集,不需要安装NuGet,手动添加程序集引用即可:
- 右键项目的「引用」节点,选择「添加引用」
- 在弹出窗口的「程序集→框架」分类下,找到
System.Drawing项,勾选后点击确认 - 重新生成项目即可
残留问题排查
如果添加引用后依然报错,按以下顺序排查:
- 检查csproj配置中是否存在
<UseWindowsForms>false</UseWindowsForms>配置,WinForms项目必须将该值设为true,开启后SDK会自动补全WinForms相关的基础依赖 - 清理解决方案,手动删除项目根目录下的
bin、obj缓存文件夹,重启Visual Studio后重新生成,避免旧版本编译缓存导致的类型识别异常 - 如果是图标资源本身加载异常,可以先删除Designer中给notifyIcon赋值Icon的代码行,回到窗体设计器,选中notifyIcon控件重新在属性面板中指定图标文件,让设计器重新生成资源绑定代码即可
不要手动修改*.Designer.cs文件内的自动生成代码,后续设计器发生编辑时会自动覆盖手动修改的内容,所有配置优先通过设计器面板、项目配置入口调整。
内容的提问来源于stack exchange,提问作者MichaSch
相关产品推荐
相关产品推荐

