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

问题描述 投票:0回答:4

我基本上和这个问题有同样的问题:Embed multiple icon in WPF EXE

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


(来源:richard-slater.co.uk

我想看到什么,并按照上面文章的建议进行一些黑客攻击,我得到了这个:


(来源:richard-slater.co.uk

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

我还通过持续集成过程构建应用程序,因此我不希望有任何需要手动干预的步骤,那么这可以通过自动化方式实现吗?

.net winforms resources assemblies icons
4个回答
7
投票

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

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

更多说明和下载可在 http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/

找到

3
投票

ChrisF提到的文章也会清除你的程序集版本信息。一旦您遵循该指南,您可能想尝试使用此处描述的构建后方法Link来嵌入清单。

编辑:

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


2
投票

这篇代码项目文章有关于如何执行此操作的演练。

基本上,您可以向项目添加更多图标资源。


1
投票

对我来说,该问题的最简单解决方案是创建一个 .res 文件,其中仅包含您需要的图标(并按您的首选顺序存储它们),在项目属性中禁用主图标并合并先前准备的图标包(.res 文件)到您的最终 .exe 文件,在构建后事件中执行此操作。虽然,如果这个过程可以完全自动化并保持清单数据不变,那么最后一步需要一个外部工具(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 ,,,
    )
    

仅此而已。每次在发布模式下编译项目时,您都会在目标 .exe 文件中获得所需的图标。

© www.soinside.com 2019 - 2024. All rights reserved.