如何包含一次可用于可执行文件和表单的图标?

gre*_*mac 6 c# embedded-resource ico winforms

.ico我尝试对应用程序可执行文件和应用程序内的表单使用单个文件(具有多种大小),而不在可执行文件中包含两次图标。

我注意到这一点是因为我的应用程序(没有图标)编译为 600KB,图标为 300KB,但是当我使用这两个应用程序时,编译的应用程序增加到 1200KB,表明它被嵌入了两次。

这是我尝试过的:

(1) 使用UI选取图标文件

  1. 转到“应用程序属性”>“应用程序”>“资源”>“图标”,然后使用“...”按钮选择MyIcon.ico文件。
    • 编译后的exe现在是900KB
  2. 转到“表单属性”>“图标”并使用“...”按钮选择MyIcon.ico文件。
    • 编译后的exe现在是1200KB

(2)使用资源

  1. 转到应用程序属性 > 资源 > 图标 > 添加现有文件并选择MyIcon.ico文件
  2. 在表单构造函数中添加:this.Icon = Properties.Resources.MyIcon;
    • 编译后的exe现在是900KB
  3. 转到“应用程序属性”>“应用程序”>“资源”>“图标”,然后选择Resources\MyIcon.ico(在下拉列表中列出)
    • 编译后的exe现在是1200KB

显然,它仍然第二次包含该文件,而不是引用嵌入资源。

(3) 使用Icon.ExtractAssociatedIcon()

  1. 转到“应用程序属性”>“应用程序”>“资源”>“图标”,然后使用“...”按钮选择MyIcon.ico文件。
    • 编译后的exe现在是900KB
  2. 在表单构造函数中,添加this.Icon = Icon.ExtractAssociatedIcon(AppDomain.CurrentDomain.FriendlyName);
    • 编译后的exe仍然是900KB,但图标是Windows中的通用“exe”图标,而不是我的应用程序的图标

在我深入探讨这个问题之前,我是否遗漏了一些明显的东西?有没有标准的方法来做到这一点?难道只是我使用Icon.ExtractAssociatedIcon()不当?

gre*_*mac 3

对不起,这是我的疏忽。方法(3)确实有效。

我从 VisualStudio 调试器运行这个文件,但没有注意到该.vshost.exe文件有一个不同的图标——这就是表单中显示的图标。

编译好的exe直接使用时是可以正常工作的。