恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

WiX Toolset 的 HarvestProjects 目标:从 MSBuild 项目自动生成 WiX 安装脚本

  • 首页
  • 资讯中心
  • /
  • WiX Toolset 的 HarvestProjects 目标:从 MSBuild 项目自动生成 WiX 安装脚本

相关资讯

VutronMusic 旧插件系统剖析:从 direct require 到 Worker 沙箱的架构演进与迁移指南 2026/10/5 6:50:38
CMake 文档开发指南:从 reStructuredText 源码到 `--help` 命令行帮助与 Sphinx 手册的完整管线 2026/10/5 6:50:38
网盘直链下载助手教程:不装官方客户端,把 9 大网盘文件导入 IDM 与 Motrix 2026/10/5 6:50:38

最新资讯

C语言定时任务实现与选型:从sleep到timer_create详解
C语言定时任务实现方案全解析:从软件定时器到timerfd与嵌入式SysTick
TSNkit+OMNeT++联合仿真:从802.1Qbv门控表到确定性网络验证
MRAM工业级应用实战:MR25H40CDF与STM32F091RC的高频写入与掉电保持方案
OpenIPC刷机实战:君正T31旧摄像头改造为开源可控的RTSP监控设备
主存储器全解析:DRAM原理、DDR5选型与内存故障排查

今日推荐

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单
YOLOv5 OBB旋转框训练实战:从DOTA数据准备到调参避坑全流程
Zeron 终端、Worktree 与 Diff 面板:像 IDE 一样查看并驱动你的代码变更

本周热门

MR25H40CDF + PIC18F65K40:工业记录仪高可靠存储实战
基于STM32的数控恒压恒流电源设计:从硬件到PID调参全解析
LT9211 MIPI重定时器原理与双路扇出实战指南

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

WiX Toolset 的 HarvestProjects 目标:从 MSBuild 项目自动生成 WiX 安装脚本

发布时间:2026/10/5 6:50:38
WiX Toolset 的 HarvestProjects 目标:从 MSBuild 项目自动生成 WiX 安装脚本 开发工具构建工具【免费下载链接】wix3WiX Toolset v3.x项目地址https://gitcode.com/gh_mirrors/wi/wix3点击查看免费下载本文围绕 WiX Toolset v3.x 的 MSBuild 集成机制讲解HarvestProjects目标Target的工作原理、启用方式与全部可配置项。通过本文你将掌握如何让 WiX 工程在编译前自动收割Harvest其他 .NET / MSBuild 项目的输出并将其转换为可被 Candle 编译的 .wxs 源码从而减少手工编写安装脚本的工作量。一、HarvestProjects 目标是什么在 WiX Toolset 的 MSBuild 集成WixTasks中HarvestProjects是一个内置构建目标其职责是把HarvestProject项Item传递给 HeatProject 任务从而从一个项目文件如.csproj、.vbproj中生成 WiX 编写代码authoring。HeatProject 任务底层包装的是heat.exeWiX 收割器使用project收割类型-project操作。这一点可以从源码得到印证heatproject.cs 中HeatProject类继承自HeatTask其OperationName返回project见 heatproject.cs并在GenerateResponseFileCommands()中拼装-project、-configuration、-platform、-pog、-wixvar等 heat.exe 命令行参数见 heatproject.cs。为什么默认关闭项目收割默认是禁用的因为它在某些项目类型上并不总能正确工作。在 wix.targets 中可以看到明确的注释与默认值!-- Project harvesting is defaulted to off until it works more consistently. -- EnableProjectHarvesting Condition $(EnableProjectHarvesting) false/EnableProjectHarvesting如何启用在你自己的 WiX 项目文件.wixproj顶部添加如下PropertyGroup即可开启PropertyGroup EnableProjectHarvestingTrue/EnableProjectHarvesting /PropertyGroup二、执行时机与产物流向一旦启用HarvestProjects目标会在编译之前被处理。在 wix.targets 中目标声明如下Target NameHarvestProjects DependsOnTargets$(HarvestProjectsDependsOn) Inputs(_AllHeatProjects);%(_AllHeatProjects.Transforms);$(MSBuildAllProjects);$(ProjectPath) Outputs(_AllHeatProjects - %(HeatOutput)) Condition $(EnableProjectHarvesting) and ((HeatProject) ! or (HarvestProject) ! ) 其执行位置在构建依赖链中与ConvertReferences、ConvertBundleReferences等目标配合见 wix.targets 与 wix.targets对Package/PatchCreation/Module类型的项目ConvertReferences会把项目引用_MSBuildProjectReferenceExistent自动转换为HeatProject项对Bundle类型的项目ConvertReferences的对应版本ConvertBundleReferences会额外指定GenerateTypepayloadgroup将输出收割为 bundle payload。收割完成后生成的源码会通过Output参数被自动添加到Compile项组中交给 Candle 任务 编译Output TaskParameterOutputFile ItemNameCompile / Output TaskParameterOutputFile ItemNameFileWrites /见 wix.targets三、声明要收割的项目在.wixproj中通过ItemGroup声明需要收割的项目。官方文档给出的示例为ItemGroup HeatProject Include..\TestProject\TestProject.csproj ProjectOutputGroupsBinaries;Sources/ProjectOutputGroups /HeatProject /ItemGroup注意HeatProject项组仅出于向后兼容而保留新代码建议统一使用HarvestProject项。两者的元数据会被 CombineHarvestProjects 目标 合并为统一的_AllHeatProjects集合并为未显式指定输出文件的项目自动补全HeatOutput元数据默认输出到$(IntermediateOutputPath)_%(HeatProject.Filename).wxs。四、Items 参考以下项与项元数据供HarvestProjects目标使用Item 或 Metadata说明(HarvestProject)必填项组。要收割的项目列表。HeatProject项组仅为向后兼容而提供。%(HarvestProject.ProjectOutputGroups)可选string元数据。要收割的项目输出组多个输出组用分号分隔。常见取值如Binaries、Sources。%(HarvestProject.Transforms)可选string元数据。应用于生成 WiX 源码的 XSL 转换多个转换文件用分号分隔。在 wix.targets 中ItemDefinitionGroup为HeatProject与HarvestProject预置了默认元数据全局属性会回填到每一项ItemDefinitionGroup HeatProject Transforms$(HarvestProjectsTransforms)/Transforms ProjectOutputGroups$(HarvestProjectsProjectOutputGroups)/ProjectOutputGroups DirectoryIds$(HarvestProjectsDirectoryIds)/DirectoryIds /HeatProject HarvestProject Transforms$(HarvestProjectsTransforms)/Transforms ProjectOutputGroups$(HarvestProjectsProjectOutputGroups)/ProjectOutputGroups DirectoryIds$(HarvestProjectsDirectoryIds)/DirectoryIds /HarvestProject /ItemDefinitionGroup此外CombineHarvestProjects之后每个项目的HeatOutput元数据会被传给 HeatProject 任务的OutputFile参数见 wix.targets。五、Properties 参考以下属性Property控制HarvestProjects目标的行为。默认值回填逻辑可在 wix.targets 中看到——每个HarvestProjects*属性在未显式设置时会回退到对应的Harvest*通用属性。Property说明$(HarvestProjectsAutogenerateGuids)可选boolean。是否生成依赖组件 GUID 自动生成的源码。若指定则取$(HarvestAutogenerateGuids)否则默认为true。$(HarvestProjectsGenerateGuidsNow)可选boolean。是否在收割时生成持久的durableGUID。若指定则取$(HarvestGenerateGuidsNow)否则默认为false。$(HarvestProjectsNoLogo)可选boolean。是否显示 heat.exe 的 Logo。若指定则取$(NoLogo)否则默认为false。$(HarvestProjectsProjectOutputGroups)可选string。对所有项目生效的全局输出组设置多个输出组用分号分隔。该全局属性仅在 MSBuild 4.0 / Visual Studio 2010 及更新版本可用。$(HarvestProjectsSuppressAllWarnings)可选boolean。抑制所有警告。若指定则取$(HarvestSuppressAllWarnings)否则默认为false。$(HarvestProjectsSuppressFragments)可选boolean。是否抑制生成独立的 Fragment。若指定则取$(HarvestSuppressFragments)否则默认为true。$(HarvestProjectsSuppressSpecificWarnings)可选string。抑制指定的某些警告。若指定则取$(HarvestSuppressSpecificWarnings)。$(HarvestProjectsSuppressUniqueIds)可选boolean。是否抑制生成唯一组件 ID。若指定则取$(HarvestSuppressUniqueIds)否则默认为false。$(HarvestProjectsTransforms)可选string。应用于所有生成 WiX 源码的 XSL 转换多个转换用分号分隔。若指定则取$(HarvestTransforms)。该全局属性仅在 MSBuild 4.0 / Visual Studio 2010 及更新版本可用。$(HarvestProjectsTreatSpecificWarningsAsErrors)可选string。将某些警告视为错误。若指定则取$(HarvestTreatSpecificWarningsAsErrors)。$(HarvestProjectsTreatWarningsAsErrors)可选boolean。将所有警告视为错误。若指定则取$(HarvestTreatWarningsAsErrors)否则默认为false。$(HarvestProjectsVerboseOutput)可选boolean。要求工具输出详细verbose信息。若指定则取$(HarvestVerboseOutput)。说明表格中 取$(HarvestXxx) 的含义是——该属性未设置时MSBuild 属性回退链先查找同名的通用Harvest*属性若仍为空才使用文档标注的最终默认值。源码中可见HarvestSuppressFragments的最终默认值为true、HarvestSuppressUniqueIds为false等见 wix.targets。六、属性如何映射到 heat.exe 命令行HarvestProjects目标最终调用 HeatProject 任务把上述属性逐一绑定到任务参数HeatProject NoLogo$(HarvestProjectsNoLogo) SuppressAllWarnings$(HarvestProjectsSuppressAllWarnings) SuppressSpecificWarnings$(HarvestProjectsSuppressSpecificWarnings) ToolPath$(WixToolPath) TreatWarningsAsErrors$(HarvestProjectsTreatWarningsAsErrors) TreatSpecificWarningsAsErrors$(HarvestProjectsTreatSpecificWarningsAsErrors) VerboseOutput$(HarvestProjectsVerboseOutput) AutogenerateGuids$(HarvestProjectsAutogenerateGuids) FipsCompliant$(FipsCompliant) GenerateGuidsNow$(HarvestProjectsGenerateGuidsNow) OutputFile%(_AllHeatProjects.HeatOutput) SuppressFragments$(HarvestProjectsSuppressFragments) SuppressUniqueIds$(HarvestProjectsSuppressUniqueIds) Transforms%(_AllHeatProjects.Transforms) Project%(_AllHeatProjects.FullPath) ProjectOutputGroups%(_AllHeatProjects.ProjectOutputGroups) GenerateType%(_AllHeatProjects.GenerateType) DirectoryIds%(_AllHeatProjects.DirectoryIds) ProjectName%(_AllHeatProjects.ProjectName) Configuration%(_AllHeatProjects.Configuration) Platform%(_AllHeatProjects.Platform) RunAsSeparateProcess$(RunWixToolsOutOfProc) GenerateWixVariables$(HarvestProjectsGenerateWixVariables) AdditionalOptions$(HarvestProjectsAdditionalOptions) Output TaskParameterOutputFile ItemNameCompile / Output TaskParameterOutputFile ItemNameFileWrites / /HeatProject这些任务参数最终由 HeatTask.cs 的BuildCommandLine转换为 heat.exe 的开关AutogenerateGuids→-agGenerateGuidsNow→-ggNoLogo→-nologoSuppressFragments→-sfragSuppressUniqueIds→-suidSuppressSpecificWarnings→-sw[N]Transforms→-t transformOutputFile→-out file而项目相关的参数Project、ProjectOutputGroups等则由HeatProject.GenerateResponseFileCommands()生成见 heatproject.cs-project、-configuration、-directoryid、-generate、-platform、-pog、-projectname、-wixvar。其中ProjectOutputGroups参数若为单个字符串且含分号会自动按分号拆分见 heatproject.cs。七、完整示例为项目引用自动生成安装脚本把以上要素组合起来一个完整的.wixproj片段如下?xml version1.0 encodingutf-8? Project xmlnshttp://schemas.microsoft.com/developer/msbuild/2003 !-- 1. 开启项目收割 -- PropertyGroup EnableProjectHarvestingTrue/EnableProjectHarvesting HarvestProjectsProjectOutputGroupsBinaries;Sources/HarvestProjectsProjectOutputGroups HarvestProjectsSuppressFragmentsTrue/HarvestProjectsSuppressFragments HarvestProjectsNoLogoTrue/HarvestProjectsNoLogo /PropertyGroup !-- 2. 声明要收割的项目 -- ItemGroup HarvestProject Include..\TestProject\TestProject.csproj ProjectOutputGroupsBinaries;Sources/ProjectOutputGroups Transforms..\Transforms\strip.xsl/Transforms /HarvestProject /ItemGroup /Project构建时CombineHarvestProjects先为HarvestProject补全HeatOutput元数据随后HarvestProjects目标调用 heat.exe 收割TestProject.csproj的 Binaries 与 Sources 输出组生成的.wxs文件自动进入Compile项组并被 Candle 任务 编译进最终安装包。若对自动生成内容不满意可以借助Transforms元数据应用 XSL 转换进行定制或用HarvestProjectsSuppressFragments控制 Fragment 的生成粒度。关于.wixproj文件的基础结构与编写方式可进一步参考 编写你的第一个 MSBuild 项目HeatProject 任务的完整参数说明见 HeatProject 任务参考。赞分享开发工具构建工具【免费下载链接】wix3WiX Toolset v3.x项目地址https://gitcode.com/gh_mirrors/wi/wix3点击查看免费下载相关推荐WiX Toolset v3.x 的 HarvestDirectory MSBuild Target 完全指南从目录自动生成 WiX 安装包 AuthoringWiX Toolset v3.x 的 HarvestDirectory MSBuild Target 完全指南从目录自动生成 WiX 安装包 Authorin开发工具构建工具WiX Toolset MSBuild 采集目标Harvest Targets完全参考HarvestDirectory / HarvestFile / HarvestProjectsWiX Toolset MSBuild 采集目标Harvest Targets完全参考HarvestDirectory / HarvestFile / H开发工具构建工具将 WiX 项目集成到每日构建不预装工具的 MSBuild 自动化方案WiX Toolset v3.x将 WiX 项目集成到每日构建不预装工具的 MSBuild 自动化方案WiX Toolset v3.x 在 WiX Toolset 中使用 MSBuil开发工具构建工具上一篇SerenityOS 中使用 Fuzzilli 对 LibJS 进行 JavaScript 引擎模糊测试FuzzilliJs 完整构建与运行指南下一篇GDevelop newIDE JS 扩展加载器JsExtensionsLoader源码解析与使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号