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
相关产品推荐
相关产品推荐

