据我所知,有(至少?)三种类型的图标嵌入。有 shell32.dll 和朋友使用的原始样式,.NET 的嵌入,以及 WPF 使用的新类型。我正在寻找如何执行第一个,因为我希望有一些其他图标可用作跳转列表的资源,它只能接受那种风格。但是,我无法弄清楚如何嵌入这种风格,只有另外两种。
我该怎么做呢?我在谷歌等上找到的所有结果都是为了将图标添加到 ResX 文件或类似文件中。
据我所知,有(至少?)三种类型的图标嵌入。有 shell32.dll 和朋友使用的原始样式,.NET 的嵌入,以及 WPF 使用的新类型。我正在寻找如何执行第一个,因为我希望有一些其他图标可用作跳转列表的资源,它只能接受那种风格。但是,我无法弄清楚如何嵌入这种风格,只有另外两种。
我该怎么做呢?我在谷歌等上找到的所有结果都是为了将图标添加到 ResX 文件或类似文件中。
我以前从未听说过“图标嵌入”这个词。如果您谈论的是在资源管理器或桌面快捷方式中对 EXE 或 DLL 可见的图标:这对任何 Windows 程序都是一样的。WF 和 WPF 都使用 /win32res 编译选项为程序集提供带有所选图标的非托管资源。您可以在 Visual Studio 中使用 File + Open + File 看到它,选择 EXE 或 DLL。
要创建 .res 文件,首先要创建一个 .rc 文件。您可以使用 C++ IDE 创建一个。右键单击解决方案,添加新项目、Visual C++、Win32、Win32 控制台应用程序。右键单击资源文件文件夹,添加 + 资源,选择图标,导入。选择您的文件。根据需要重复。构建后,您将在项目的 Debug 构建目录中获得一个 .res 文件。
回到您的 C# 项目,项目 + 属性,应用程序选项卡。选择资源文件选项并导航到 .res 文件。
我强烈建议您查看此处发布的此解决方案 ( http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/ )。它直接集成到 ms build post build 事件中,不需要非托管项目(从 .rc/.res 文件创建程序集)。
这消除了在您想要更新图标时管理第二个解决方案/程序集的依赖,并让您免于 IL 合并已编译的 c++ 程序集。