自动在.NET可执行文件中嵌入多个图标

时间:2010-08-14 21:05:11

标签: .net winforms resources assemblies icons

我基本上遇到与此问题相同的问题:Embed multiple icons in WPF EXE

当您单击资源管理器中的“更改图标”时,我的.NET 2.0 WinForms应用程序当前具有此功能:

EVEMon Single Icon http://www.richard-slater.co.uk/wp-content/uploads/2010/08/EVEMonIconsWhatIHave.png

我希望看到的内容,以及上述文章中提到的一些黑客行为,我得到了这个:

EVEMon Multiple Icons http://www.richard-slater.co.uk/wp-content/uploads/2010/08/EVEMonIconsWhatIWant.png

但是,获取程序集的所有版本信息的过程将丢失。我需要在程序集中维护版本信息,因为我的自动更新过程依赖于此来识别应用程序的已安装版本。

我还通过持续集成流程构建应用程序,因此我不希望任何需要手动干预的步骤,这是否可以自动化?

4 个答案:

答案 0 :(得分:7)

我刚刚创建了一个简单的工具来完成这一操作,而不必弄乱.res文件。它是一个很小的实用程序,您可以将其用作Post-Build事件的一部分,并允许您将特定文件夹中的所有图标文件添加到程序集中。如果我们假设您在主项目文件夹下有一个icons文件夹,则可以添加以下构建后事件:

C:\path\to\InsertIcons.exe $(TargetPath) $(ProjectDir)icons

可以在http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/

找到进一步的说明和下载

答案 1 :(得分:3)

ChrisF提到的文章也将删除你的程序集版本信息。按照该指南操作后,您可能需要尝试使用此处所述的构建后方法http://blogs.msdn.com/b/cheller/archive/2006/08/24/718757.aspx来嵌入清单。

编辑:

这是“方法#2 - ”通用“方法(使用mt.exe)”

答案 2 :(得分:2)

Code Project article详细介绍了如何执行此操作。

基本上,您为项目添加了更多图标资源。

答案 3 :(得分:1)

对我来说,解决该问题的最简单方法是创建一个.res文件,其中只包含您需要的图标(并按照您的首选顺序存储它们),禁用项目属性中的主图标并合并以前准备好的图标包(。 res文件)到你的最终.exe文件,在post-build事件中完成。虽然,如果此过程可以完全自动化并保持清单数据不变,则最后一步需要一个外部工具( ResHacker ),它允许您通过命令行执行.res文件合并作业(当然,Visual Studio可以做到这一点,但据我所知,没有命令行界面来实现它 - 如果我错了,请纠正我。)

  1. 下载空白.res文件(http://www.codeproject.com/Tips/160885/How-to-Embed-Multiple-Icons-and-Color-Animated-Cur.aspx)并将其添加到您的项目中

  2. 使用您的图标填写以前添加的.res文件

  3. 从项目中删除主图标(项目 - >属性)

  4. 下载 ResHacker 工具(http://www.angusj.com/resourcehacker/)并将其放在任意位置

  5. 在构建后的事件中添加类似的行:

    if $(ConfigurationName) == Release (
      ..\..\..\..\..\Tools\ResHack\ResHacker.exe -add $(TargetPath), $(TargetPath), $(ProjectDir)Properties\AssemblyWin32.res ,,,
    )
    
  6. 这就是全部。每次在发布模式下编译项目时,您都会获得目标.exe文件的通缉图标。