如何包含可同时用于可执行文件和表单的图标?
How do I include an icon once that can be used for both the executable and a form?
我正在尝试为应用程序可执行文件和应用程序内的表单使用单个 .ico
文件(具有多种大小),而不是在可执行文件中两次包含图标。
我注意到这一点是因为我的应用程序(没有图标)编译后为 600KB,图标为 300KB,但是当我同时使用这两个应用程序时,编译后的应用程序增加到 1200KB,表明它被嵌入了两次。
这是我试过的方法:
(1) 使用 UI
选择图标文件
- 转到 应用程序属性 > 应用程序 > 资源 > 图标 并使用“...”按钮选择
MyIcon.ico
文件。
- 编译后的exe现在是900KB
- 转到“表单属性”>“图标”并使用“...”按钮选择
MyIcon.ico
文件。
- 编译后的exe现在是1200KB
(2) 使用资源
- 转到应用程序属性>资源>图标>添加现有文件并选择
MyIcon.ico
文件
- 在表单构造函数中,添加:
this.Icon = Properties.Resources.MyIcon;
- 编译后的exe现在是900KB
- 转到 应用程序属性 > 应用程序 > 资源 > 图标,然后选择
Resources\MyIcon.ico
(在下拉列表中列出)
- 编译后的exe现在是1200KB
很明显,它仍然是第二次包含该文件,而不是引用嵌入式资源。
(3) 使用 Icon.ExtractAssociatedIcon()
- 转到 应用程序属性 > 应用程序 > 资源 > 图标 并使用“...”按钮选择
MyIcon.ico
文件。
- 编译后的exe现在是900KB
- 在表单构造器中,添加
this.Icon = Icon.ExtractAssociatedIcon(AppDomain.CurrentDomain.FriendlyName);
- 编译后的 exe 仍然是 900KB,但图标是来自 Windows 的通用 "exe" 图标,而不是我应用程序的图标
在深入探讨之前,我是否漏掉了一些明显的东西?有没有标准的方法来做到这一点?我只是没有正确使用 Icon.ExtractAssociatedIcon()
吗?
将必要的图标添加到项目中后,您必须做两件事:
- Select表格和"Properties"select那个图标在"Icon"属性.
- 转到项目的属性并在图标字段中 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,可以正常运行
我正在尝试为应用程序可执行文件和应用程序内的表单使用单个 .ico
文件(具有多种大小),而不是在可执行文件中两次包含图标。
我注意到这一点是因为我的应用程序(没有图标)编译后为 600KB,图标为 300KB,但是当我同时使用这两个应用程序时,编译后的应用程序增加到 1200KB,表明它被嵌入了两次。
这是我试过的方法:
(1) 使用 UI
选择图标文件- 转到 应用程序属性 > 应用程序 > 资源 > 图标 并使用“...”按钮选择
MyIcon.ico
文件。- 编译后的exe现在是900KB
- 转到“表单属性”>“图标”并使用“...”按钮选择
MyIcon.ico
文件。- 编译后的exe现在是1200KB
(2) 使用资源
- 转到应用程序属性>资源>图标>添加现有文件并选择
MyIcon.ico
文件 - 在表单构造函数中,添加:
this.Icon = Properties.Resources.MyIcon;
- 编译后的exe现在是900KB
- 转到 应用程序属性 > 应用程序 > 资源 > 图标,然后选择
Resources\MyIcon.ico
(在下拉列表中列出)- 编译后的exe现在是1200KB
很明显,它仍然是第二次包含该文件,而不是引用嵌入式资源。
(3) 使用 Icon.ExtractAssociatedIcon()
- 转到 应用程序属性 > 应用程序 > 资源 > 图标 并使用“...”按钮选择
MyIcon.ico
文件。- 编译后的exe现在是900KB
- 在表单构造器中,添加
this.Icon = Icon.ExtractAssociatedIcon(AppDomain.CurrentDomain.FriendlyName);
- 编译后的 exe 仍然是 900KB,但图标是来自 Windows 的通用 "exe" 图标,而不是我应用程序的图标
在深入探讨之前,我是否漏掉了一些明显的东西?有没有标准的方法来做到这一点?我只是没有正确使用 Icon.ExtractAssociatedIcon()
吗?
将必要的图标添加到项目中后,您必须做两件事:
- Select表格和"Properties"select那个图标在"Icon"属性.
- 转到项目的属性并在图标字段中 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,可以正常运行