【问题标题】:Automatically embed multiple icons in a .NET Executable在 .NET 可执行文件中自动嵌入多个图标
【发布时间】:2011-03-29 22:40:33
【问题描述】:

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

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


(来源:richard-slater.co.uk

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


(来源:richard-slater.co.uk

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

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

【问题讨论】:

  • 添加图标作为资源还不够吗?
  • 将图标添加为 .NET 资源 (.resx) 不会使它们在 Windows 资源管理器中可用。

标签: .net winforms resources assemblies icons


【解决方案1】:

Code Project article 提供了如何执行此操作的演练。

基本上你在项目中添加更多的图标资源。

【讨论】:

  • 看起来很有希望,我明天去看看这是否能满足我的所有需求。
  • 那篇文章并没有解决他的版本问题,它似乎阻止了清单被嵌入。
【解决方案2】:

ChrisF 提到的文章也会抹掉你的汇编版本信息。遵循该指南后,您可能想尝试使用此处描述的构建后方法http://blogs.msdn.com/b/cheller/archive/2006/08/24/718757.aspx 嵌入清单。

编辑:

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

【讨论】:

  • 感谢您为我进一步调查,我将查看 CodeProject 指南和博客,看看我是否可以建立一个自动化流程。
【解决方案3】:

对我来说,解决这个问题最简单的方法是创建一个 .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 文件中获得所需的图标。

【讨论】:

  • 是的,确实如此。此外,ResHacker 工具允许您控制 .exe 文件中包含的整个资源数据,例如无需将其他 .res 文件合并到其中,您可以添加一些图标或替换它,无论您想做什么。请注意,此工具的一个主要特点是命令行可用性。
【解决方案4】:

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

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

更多描述和下载可以在http://einaregilsson.com/add-multiple-icons-to-a-dotnet-application/找到

【讨论】:

  • 甜蜜。我特别感谢 InsertIcons 是开源的,并且在 github 上。
  • 感谢实用程序。像魅力一样工作。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多