You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub工作流中用WiX Toolset多.wxs生成.msi遇引用问题求助

解决WiX Toolset在GitHub Action中引用Components.wxs的问题

核心问题定位

你遇到的LGHT0094错误,本质是链接阶段(light.exe)未包含Components.wixobj文件,导致无法找到Components组件组的定义。你的candle命令虽然编译了Components.wxs,但light命令只处理了Product.wixobj,遗漏了Components.wixobj。

分步解决方案

1. 修复GitHub Action的light命令

修改run脚本中的light命令,添加Components.wixobj参数:

run: |
  cd Setup
  C:\wix\heat.exe dir ..\publishData -ag -dr PublishData -srd -sfrag -suid -cg Components -out Components.wxs
  C:\wix\candle.exe -ext C:\wix\WixIIsExtension.dll -ext C:\wix\WixUIExtension.dll Components.wxs Product.wxs 
  # 新增Components.wixobj到light命令的输入列表
  C:\wix\light.exe Components.wixobj Product.wixobj -ext C:\wix\WixIIsExtension.dll -ext C:\wix\WixUIExtension.dll -out MySetup.msi

2. 验证Components.wxs的目录引用正确性

你的heat命令使用了-dr PublishData参数,这意味着生成的Components.wxs中DirectoryRef的Id应该是PublishData,但你当前提供的Components.wxs里写的是PATH,这会导致目录引用未解析的错误。请确保:

  • Components.wxs中的DirectoryRef Id为PublishData(heat自动生成,不要手动修改)
  • Product.wxs中存在对应的Directory定义,例如:
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLFOLDER" Name="你的应用名称">
      <!-- 必须存在这个Id为PublishData的目录,和heat的-dr参数对应 -->
      <Directory Id="PublishData" Name="publishData" />
    </Directory>
  </Directory>
</Directory>

3. 废弃.wxi的错误用法

.wxi是WiX的预处理器包含文件,仅用于定义变量、宏等,不能放置ComponentGroupRef这类WiX元素,所以你之前尝试的IncludeComponents.wxi方法是错误的,直接在Product.wxs的Feature中使用ComponentGroupRef Id="Components"即可,只要编译链接步骤正确,这个引用就能生效。

4. 关于wixproj的Compile项

由于你是直接使用candle/light命令行编译,而非通过msbuild构建wixproj,所以修改wixproj中的<Compile Include="Components.wxs" />不会起作用,无需进行此操作。

内容的提问来源于stack exchange,提问作者QuLa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 03:35:15