使用.exe和Form的相同图标

时间:2011-09-01 14:36:20

标签: c# .net winforms

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

(之前已经问过这个问题,here,但答案似乎没有解决问题。范梅尔的答案似乎只提取了一个图标(例如16x16),Sunlight的答案只提取了32x32,并且lc的答案并没有解决问题:可执行文件中仍然存在重复的图标。)

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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