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

How do I include an icon once that can be used for both the executable and a form?

我正在尝试为应用程序可执行文件和应用程序内的表单使用单个 .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() 吗?

将必要的图标添加到项目中后,您必须做两件事:

  1. Select表格和"Properties"select那个图标在"Icon"属性.
  2. 转到项目的属性并在图标字段中 select 相同的图标。

构建项目时,到处都会看到必要的图标。

更新: 抱歉没有完整的答案,我们开始吧: 没错,它创建了两次,第一次是 ico 文件本身,第二次是 Form.resx 文件中的 base64 字符串,是在第一步添加 ico 时生成的。那么,如何解决呢

首先进入InitializeComponent()方法,将this.Icon字符串修改为如下

this.Icon = new Icon(Path.GetDirectoryName(Application.ExecutablePath) + "../../../[YOUR ICO FILE NAME].ico");

,然后删除自动生成的 Form.resx 文件。 这里的图标对象是System.Drawing.Icon。例如,我设置的文件名,如您所见,它是 *.sln 文件旁边的 ico。在实际情况下,它不会转到父文件夹。

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

我是 运行 来自 VisualStudio 调试器的,但没有注意到 .vshost.exe 文件有一个不同的图标 -- 这就是表格中显示的内容。

直接使用编译后的exe,可以正常运行