Wix 资源收集工具“Heat”。如何获取具有动态名称的文件,例如构建时生成的 Microsoft 运行时文件

Posted

技术标签:

【中文标题】Wix 资源收集工具“Heat”。如何获取具有动态名称的文件,例如构建时生成的 Microsoft 运行时文件【英文标题】:Wix resource harvesting tool "Heat". How to harvest files with dynamic name like Microsoft run time files generated on build 【发布时间】:2020-01-20 16:29:31 【问题描述】:

我有一个非常简单的问题,但由于 Wix 的限制,我似乎无法轻易找到答案,而且我对 Wix 还是很陌生。

问题是,如标题中所述,我无法制作在构建时生成的几个文件,并且这些文件的名称会根据操作系统运行时间(准确地说是 .Net Core)进行更改,然后手动进入产品.wix 文件和更改几个资源的名称。

文件示例

\obj\Release\netcoreapp2.2\win-x64\PubTmp\Out\mscordaccore_amd64_amd64_4.6.28207.03.dll".

版本 4.6.28207.03.dll 是动态生成的。

【问题讨论】:

【参考方案1】:

您可以尝试获取outputs of your vs project,因为 dll 文件是您项目的输出。

heat project "MyProject.csproj" -pog:Binaries -ag -template:fragment -out project.wxs

您还可以尝试在您的主应用程序项目中添加构建后事件,以将这些文件复制到一个特殊位置并让 Heat.exe 从那里读取它们。你可以参考这个博客here。

在 azure devops 管道中,您可以尝试添加 copy file task 以将这些文件复制到 Heat 可以读取的特定位置。

【讨论】:

我想到了编写预构建步骤并运行脚本来收集文件。但在那种情况下,我在更新我的 Product.wxs 和 ProductFolderStructure.wxs 时仍然遇到问题。这也将是一些脚本,这不是一个简单的解决方案,因为我需要插入和更改诸如 Source、ID 等组件参数......但我从所有研究中看到没有更简单的方法

以上是关于Wix 资源收集工具“Heat”。如何获取具有动态名称的文件,例如构建时生成的 Microsoft 运行时文件的主要内容,如果未能解决你的问题,请参考以下文章

如何包含由 Heat 创建的 Wix Fragments

如何在 WiX 安装程序中将应用程序添加为防火墙例外

如何让 Wix Heat.exe 保留自定义文件 ID?

Wix、Heat 和 Wxi 文件

WiX 安装程序:使用 xslt 和 heat.exe 如何在找到父/子匹配后更改父 ID 的值?

WiX 安装程序:将 xslt 与 heat.exe 一起使用时,如何在还使用匹配属性时找到匹配的子字符串?