我是一个大型系统的开发人员(> 100 个解决方案中的项目,> 100 000 个 LOC,> 10 个服务,...)并且过去使用 wix 安装了这个系统,它运行良好。现在我需要一种方法来修补(次要升级)系统部分并遇到几个问题。
我当前的 Wix 设置如下:
- 我有 VS2010 和 Wix3.6 工具集和 TFS2012 来构建整个东西并获得安装程序
- 我正在使用每个服务的设置库项目类型
- 我正在使用一个安装项目将所有东西捆绑在一起并为整个系统获取一个安装程序。
无法更改此设置。
设置库项目设置如下:
- 我使用 heat-directory msbuild 任务来生成组件和文件,并且我正在使用预处理器变量来修改文件路径。
- 我需要修改文件路径,因为必须可以在本地开发人员系统上构建安装程序,并在文件夹结构不同的 tfs 构建系统上构建安装程序。
- TFS 始终使用相同的目录来编译软件的后续版本,并将成功编译后的输出移动到唯一的文件夹结构中。
现在我需要一个补丁。我创建了 Patch.wxs 并为它调用了烛光。我打电话给torch来获取差异文件。最后想用pyro创建补丁。一个简单的测试项目一切正常,但在大系统上 Pyro 的问题是找不到要安装的文件。通过我的设置(见上文),我必须使用预处理器变量并在我的 wix 输出中具有完整的限定路径(例如:C:\builds\myproduct\prodct.exe 作为文件源)。将 TFS 输出移动到另一个位置后,此路径不再有效。我尝试对 pyro 使用 -bt 和 -bu 开关,但这仅适用于相对路径或命名绑定路径。
现在我想更改我的 wix 项目设置以使用命名的绑定路径而不是预处理器变量,但似乎这是不可能的。heat 只能使用预处理器变量或 wixvariables,但似乎无法使用 bindpath 变量。heat 提供了一个开关 -wixvar ,它应该创建活页夹变量而不是预处理器变量,但我什么都不做。
现在我尝试在加热时不使用 wix 和预处理器变量,并根据 -bu -bt 开关告诉光在哪里可以找到文件。但如果我不设置预处理器变量,则生成的文件看起来像 Sources\product.exe。我无法摆脱这个来源。我知道我可以使用 xslt 转换所有 xml 并删除源,但这是一种解决方法,只有在没有其他解决方案的情况下我才会实施。这也意味着 wix 工具链中存在问题。
看起来 pyro 只支持 bindpath 变量,而 heat 只支持预处理器和 wix 变量。这似乎真的很疯狂,因为他们应该如何一起工作?
如果我使用 lit、light、candle、heat、torch 和 pyro 并且如果原始构建路径已更改(这在构建系统上很常见)并且文件路径是用热创建的,因此如何创建补丁并因此被修复或预处理器或wix变量?