在 Azure DevOps 中为 Wix MSI 文件生成 GUID

Generating GUIDs for Wix MSI files in Azure DevOps

我正在为 Web 服务器应用程序和 Sitecore 前端应用程序设置 Wix 安装程序。我的问题并非特定于网络服务器或 Sitecore。我的问题是 Wix 以及如何将其用于持续交付。

1) Wix 需要每个文件和产品本身的 GUID。我是否需要在每次构建时更新 Wix 文件中的每个 GUID?在 Git 存储库中,可能会有很多变化。

2) 如果我必须在我的 CD 服务器 (Azure DevOps) 上的每个分支(dev、staging 和 master)进行构建时更新 GUID,我如何在 Azure DevOps 中使用新的 GUID 更新 Wix 文件?

我们真正想要的是能够在我们的 3 台服务器(开发、暂存和主服务器)中的每台服务器上构建、发布、部署并可能回滚到上一个好的版本。我最初以为我们会在部署步骤中复制文件,但我被要求构建一个 MSI 安装程序,因为它更干净并且可以更轻松地回滚错误的安装。如果您认为 Wix 是错误的工具或有更好的流程,也请说出来。 Wix 确实看起来过于冗长:基本上每个文件都有一个组件,每个文件都有生成的 GUID。

Product-, Package-, Upgrade Code: You can use WiX's auto-GUIDs for components (for most components). Using auto-GUIDs significantly reduces WiX source complexity. Is it safe?

The Product Code, and Upgrade Code you need to manage. For most purposes you would change Product Code and Package Code for each release. Package Code can be set to auto-generate on build. In fact product code can as well, if you use major upgrades only. Nice summary from Flexera on product, package and upgrade code.


Hello WiX: 有一个WiX Visual Studio Hello World example here. It should show you the basics of compiling a working setup with WiX and Visual Studio. There are also a bunch of quick start tips for WiX here(许多link样本)。


Auto-Magic:您可以按照此处所述使用 WiX 的自动引导功能:Syntax for guids in WIX?。对于 WiX 能够神奇地自动管理 GUID 的组件,您只需省略硬编码的 GUID。

了解组件 GUID:对组件 GUID 的工作原理的实用描述可能有助于更好地理解它们:Change my component GUID in wix?

以下是其他信息来源:

Rob Mensching,WiX 创造者:

Flexera:


Azure DevOps:我不使用这种环境,但如果你使用自动组件 GUID,那么你通常只需要为每个版本更新产品代码和产品版本——我可能忘记了什么。您可以将包代码设置为在构建时自动生成,因为它只是应该对于每个文件都是唯一的(为每个构建创建的新文件,所以只是自动生成)。许多人还将产品代码设置为自动生成,因为他们只使用主要升级。

我实际上从来不需要它,但是您应该能够将值传递给 WiX 源代码中的编译器变量,这意味着您可以将新版本和产品代码(或只是版本)传递给 candle.exe,light.exe。另请参阅下面的 link (msbuild)。很快就会尝试挖掘出更好的。


一些链接:

  • Best way to create a wix fragment file based on User-defined directories to be used in MSBUILD