使用.exe和Form的相同图标

Tom*_*Tom 0 .net c# winforms

在我的WinForms应用程序中,如果我为我的应用程序设置了一个图标并为我的表单设置了一个图标,则该图标在我的可执行文件中出现两次 有可能避免这种情况吗?

(这个问题已经被问过,在这里,但答案似乎并没有解决问题.vanmelle的答案似乎只提取一个图标(例如,16×16),阳光的回答仅抽出32×32,和LC的回答没有解决问题:可执行文件中仍然存在重复的图标.)

如果无法完成此任务,为什么会这样?在WinForms中使用相同的图标作为可执行文件和表单是什么?

Han*_*ant 5

这是在完全不受管理的操作系统上运行托管代码的必然结果.Windows资源管理器只知道如何读取非托管资源.你可以看到它们的样子,在Visual Studio中使用File + Open + File并选择你的.exe.您通常会在其中看到列出的三个资源组:

  • RT_MANIFEST,包含告诉Windows您的程序可识别Vista的清单
  • 版本,包含文件版本资源,其值来自AssemblyInfo.cs文件.在Explorer中使用"属性+详细信息"选项卡时,可以看到其内容.请注意超级重要的[AssemblyVersion]在Vista及以上版本中是不可见的
  • 图标,包含您添加的图标.

此非托管资源数据您添加的托管资源是分开的.托管资源将编译到程序集清单中.非托管资源存储在图像文件的.rsrc部分中.您可以使用/ win32res命令行选项覆盖自动生成的版本.这需要一个.res文件,一个由rc.exe资源编译器从.rc资源脚本生成的二进制文件.一个古老的Windows SDK工具.

这可能会在某一天发生变化,超级秘密的Midori项目传闻将专注于托管操作系统.现在,我们将不得不使用胶水.