我正在尝试为应用程序可执行文件和应用程序内的表单使用单个.ico
文件(具有多种大小),而不会在可执行文件中包含两次图标。
我注意到了这一点,因为我的应用程序(没有图标)是600KB编译的,图标是300KB,但当我使用时,应用程序增加到1200KB编译,表明它被嵌入两次。
这是我尝试过的:
MyIcon.ico
文件。
MyIcon.ico
文件。
MyIcon.ico
文件this.Icon = Properties.Resources.MyIcon;
Resources\MyIcon.ico
(在下拉列表中列出)
显然,它仍然是第二次包含该文件,而不是引用嵌入式资源。
MyIcon.ico
文件。
this.Icon = Icon.ExtractAssociatedIcon(AppDomain.CurrentDomain.FriendlyName);
在我深入研究之前,我是否遗漏了一些明显的东西?有没有标准的方法来做到这一点?我只是没有正确使用Icon.ExtractAssociatedIcon()
吗?
答案 0 :(得分:1)
对不起,这是我的疏忽。方法(3)确实有效。
我是从VisualStudio调试器运行的,但没有注意到.vshost.exe
文件有一个不同的图标 - 这就是表单中显示的内容。
当直接使用编译的exe时,它可以正常工作。
答案 1 :(得分:0)
在项目中添加必要的图标后,您必须做两件事:
在构建项目时,您将在任何地方看到必要的图标。
<强>更新强> 抱歉没有完整答案,我们走了: 你是对的,它创建了两次,第一个是ico文件本身,第二个是Form.resx文件中的base64字符串,当你在第一步中添加ico时生成。那么,如何解决呢?
首先转到InitializeComponent()方法,使用.Icon字符串并将其更改为以下
this.Icon = new Icon(Path.GetDirectoryName(Application.ExecutablePath) + "../../../[YOUR ICO FILE NAME].ico");
,然后删除自动生成的Form.resx文件。 这里的Icon对象是System.Drawing.Icon。我设置的文件名,例如,你看到它是* .sln文件旁边的ico。在实际情况中,它将不会转到父文件夹。