如何使用Wix Toolset v4的Heat从目录收割文件(免批量NuGet)
解决Wix v4中使用Heat命令行收割目录的问题
一、无需NuGet包,直接用Wix v4的Heat命令行工具
Wix v4的Heat已经整合到wix.exe的子命令体系里,不用给每个项目单独安装NuGet包,直接通过命令行调用即可。先确保wix.exe在系统PATH中,或者使用完整路径执行。
对应你原来的旧版命令,Wix v4的命令行写法如下:
wix heat dir "binFiles" -dr BIN_FOLDER -cg BinFilesGroup -t edition.xsl -gg -g1 -sf -srd -scom -sreg -var var.BinFilesSourcePath -out BinFiles.wxs
参数对应说明:
-dr BIN_FOLDER:指定收割文件关联的目录ID,对应配置里的DirectoryRef-cg BinFilesGroup:设置组件组名称,对应ComponentGroupName-t edition.xsl:指定用于转换的XSL文件,直接替换原来的%edition%.xsl-gg:自动生成组件GUID,对应HarvestDirectoryAutogenerateGuids true-g1:生成不带大括号的GUID,Wix v4里这个参数作用和旧版一致,输出格式为XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX-sf:抑制生成片段,对应HarvestFileSuppressFragments true-srd:不包含根目录,对应HarvestDirectorySuppressRootDirectory true-scom:跳过COM注册信息收割,对应HarvestDirectorySuppressCom true-sreg:跳过注册表信息收割,对应HarvestDirectorySuppressRegistry true-var var.BinFilesSourcePath:指定预处理器变量,对应HarvestFilePreprocessorVariable var.BinFilesSourcePath-out BinFiles.wxs:直接指定输出的wxs文件路径,和旧版用法完全一致
二、添加BindPath配置
在你的wixproj项目文件里添加以下配置,确保构建时能正确定位文件:
<ItemGroup> <BindPath Include="Folder/To/Harvest"> <Name>BinFilesSourcePath</Name> </BindPath> </ItemGroup>
或者也可以在构建时通过命令行传递变量:wix build -dBinFilesSourcePath=Folder/To/Harvest
三、批量处理多个安装程序的小技巧
因为你有多个同名的解决方案和安装程序,写个PowerShell脚本就能批量执行Heat命令:
Get-ChildItem -Path .\Setup -Filter *.sln | ForEach-Object { $projDir = $_.DirectoryName $outputWxs = Join-Path $projDir "BinFiles.wxs" $harvestDir = Join-Path $projDir "binFiles" $xslFile = Join-Path $projDir "edition.xsl" wix heat dir $harvestDir -dr BIN_FOLDER -cg BinFilesGroup -t $xslFile -gg -g1 -sf -srd -scom -sreg -var var.BinFilesSourcePath -out $outputWxs }
内容的提问来源于stack exchange,提问作者dgxhubbard
相关产品推荐
相关产品推荐

