Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对.exe和表单使用相同的图标_C#_.net_Winforms - Fatal编程技术网

C# 对.exe和表单使用相同的图标

C# 对.exe和表单使用相同的图标,c#,.net,winforms,C#,.net,Winforms,在我的WinForms应用程序中,如果我为我的应用程序设置了一个图标,并为我的窗体设置了一个图标,则该图标会在我的可执行文件中出现两次。有可能避免这种情况吗 (这个问题以前提过,但答案似乎没有解决问题。vanmelle的答案似乎只提取了一个图标(例如16x16),Sunlight的答案只提取了32x32,lc的答案没有解决问题:可执行文件中仍然有一个重复的图标。) 如果不可能完成这项任务,为什么会这样?在WinForms中,对可执行文件和表单使用相同的图标有什么困难?这是在完全非托管的操作系统上

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

(这个问题以前提过,但答案似乎没有解决问题。vanmelle的答案似乎只提取了一个图标(例如16x16),Sunlight的答案只提取了32x32,lc的答案没有解决问题:可执行文件中仍然有一个重复的图标。)


如果不可能完成这项任务,为什么会这样?在WinForms中,对可执行文件和表单使用相同的图标有什么困难?

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

  • RT_清单,包含告诉Windows您的程序支持Vista的清单
  • 版本,包含具有从AssemblyInfo.cs文件派生的值的文件版本资源。在资源管理器中使用“属性+详细信息”选项卡时,可以看到其内容。请注意,超级重要的[AssemblyVersion]在Vista及更高版本中是如何不可见的
  • 图标,包含您添加的图标
此非托管资源数据与您添加的托管资源是分开的。托管资源被编译到程序集清单中。非托管资源存储在映像文件的.rsrc部分。您可以使用/win32res命令行选项覆盖自动生成的版本。它需要一个.res文件,一个由rc.exe资源编译器从.rc资源脚本生成的二进制文件。一个古老的Windows SDK工具


这也许有一天会改变,据说超级秘密的Midori项目将重点放在托管操作系统上。现在,我们只能靠胶水勉强度日。

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

  • RT_清单,包含告诉Windows您的程序支持Vista的清单
  • 版本,包含具有从AssemblyInfo.cs文件派生的值的文件版本资源。在资源管理器中使用“属性+详细信息”选项卡时,可以看到其内容。请注意,超级重要的[AssemblyVersion]在Vista及更高版本中是如何不可见的
  • 图标,包含您添加的图标
此非托管资源数据与您添加的托管资源是分开的。托管资源被编译到程序集清单中。非托管资源存储在映像文件的.rsrc部分。您可以使用/win32res命令行选项覆盖自动生成的版本。它需要一个.res文件,一个由rc.exe资源编译器从.rc资源脚本生成的二进制文件。一个古老的Windows SDK工具


这也许有一天会改变,据说超级秘密的Midori项目将重点放在托管操作系统上。现在,我们只能将就着用胶水了。

对不起,我不明白你的回答。你是说有一种方法可以避免重复的图标吗?如果是,我如何使用rc.exe实现这一点?(另外,当我用File-->open File打开exe时,我看不到上面提到的任何内容。)“这是不可避免的结果”表示“不,无法避免”。不知道你为什么看不到我描述的。在VisualStudio中使用File+Open+File,至少从VS2005开始就支持此功能。选择任何文件,如c:\windows\notepad.exe抱歉,我不理解您的答复。你是说有一种方法可以避免重复的图标吗?如果是,我如何使用rc.exe实现这一点?(另外,当我用File-->open File打开exe时,我看不到上面提到的任何内容。)“这是不可避免的结果”表示“不,无法避免”。不知道你为什么看不到我描述的。在VisualStudio中使用File+Open+File,至少从VS2005开始就支持此功能。选择任意文件,如c:\windows\notepad.exe