我基本上和这个问题有同样的问题:Embed multiple icon in WPF EXE
当您在资源管理器中单击“更改图标”时,我的 .NET 2.0 WinForms 应用程序当前具有此功能:
(来源:richard-slater.co.uk)
我想看到什么,并按照上面文章的建议进行一些黑客攻击,我得到了这个:
(来源:richard-slater.co.uk)
但是,获取程序集的所有版本信息的过程都会丢失。我需要在程序集中维护版本信息,因为我的自动更新过程依赖于此来识别应用程序的已安装版本。
我还通过持续集成过程构建应用程序,因此我不希望有任何需要手动干预的步骤,那么这可以通过自动化方式实现吗?
我刚刚创建了一个简单的工具来完成此操作,而不必弄乱 .res 文件。它是一个小型实用程序,您可以将其用作构建后事件的一部分,并允许您将特定文件夹中的所有图标文件添加到程序集中。如果我们假设您的主项目文件夹下有一个图标文件夹,您可以添加以下构建后事件:
C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons
更多说明和下载可在 http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/
找到这篇代码项目文章有关于如何执行此操作的演练。
基本上,您可以向项目添加更多图标资源。
对我来说,该问题的最简单解决方案是创建一个 .res 文件,其中仅包含您需要的图标(并按您的首选顺序存储它们),在项目属性中禁用主图标并合并先前准备的图标包(.res 文件)到您的最终 .exe 文件,在构建后事件中执行此操作。虽然,如果这个过程可以完全自动化并保持清单数据不变,那么最后一步需要一个外部工具(ResHacker),它允许您通过命令行执行 .res 文件合并工作(当然,Visual Studio可以做到这一点,但据我所知,没有命令行界面来实现它 - 如果我错了,请纠正我)。
下载一个空白的 .res 文件 (http://www.codeproject.com/Tips/160885/How-to-Embed-Multiple-Icons-and-Color-Animated-Cur.aspx) 并将其添加到您的项目
使用您的图标填写之前添加的 .res 文件
从项目中删除主图标(项目 -> 属性)
下载ResHacker工具(http://www.angusj.com/resourcehacker/)并将其放置在您想要的任何地方
将类似的行添加到您的构建后事件中:
if $(ConfigurationName) == Release (
..\..\..\..\..\Tools\ResHack\ResHacker.exe -add $(TargetPath), $(TargetPath), $(ProjectDir)Properties\AssemblyWin32.res ,,,
)
仅此而已。每次在发布模式下编译项目时,您都会在目标 .exe 文件中获得所需的图标。