在 Wix 中修改产品版本

Posted

技术标签:

【中文标题】在 Wix 中修改产品版本【英文标题】:Modifying product version in Wix 【发布时间】:2018-04-26 15:10:16 【问题描述】:

我正在尝试从我的 exe 文件中绑定文件版本以用作产品版本。关注:How can I set the WiX installer version to the current build version?

问题是我的程序集以例如 2018.0.0.0 的格式构建。主要升级需要最大 255 的版本号,这意味着我必须先从我的 productVersion 变量中删除前两个数字,然后才能将其设置为 ProductVersion 属性。有没有办法通过 xsl 或其他方式修改变量?

无法通过自定义操作进行修改,因为我希望在 msi 文件中设置属性。

感谢您对这个 djungle 的任何帮助,

 <?define productVersion= !(bind.FileVersion.MyExe.Exe) ?>

 <Product Id="*" 
       UpgradeCode="12345678-1234-1234-1234-123456789123" 
       Name="My Application" 
       Language ="1033" 
       Version="$(var.productVersion)"
       Manufacturer="My Company" >

【问题讨论】:

您可以更改您的 EXE 版本以匹配语义版本控制标准吗? 在这种情况下,由于某些条件,我想将其保留在语义版本控制标准之外。 2018.0.0.0是你的程序集版本还是你的程序集文件版本? 程序集版本和程序集文件版本都设置为此。也许可以通过 powershell 脚本来做到这一点,但我不想用不必要的“hacks”来超载 cake 脚本。我一直在寻找一种通过预处理器运算符从 !(bind.FileVersion.MyExe.Exe) 获取子字符串的方法。但它似乎不支持。 仅供参考-AssemblyVersion 用于强名称/gac 目的,AssemblyFileVersion 等同于 win32 FileVersion 并用于跟踪目的。仅在重大更改时更改 AssemblyVersion 并在每次构建时更改 AssemblyFileVersion 是很常见的。例如,这就是 .net 基类库的修补方式。也许如果你这样做,你可以绑定到后者。 (见下面的答案) 【参考方案1】:

如果您无法从程序集中绑定/推断,那么您将需要让构建自动化将 wix 变量传递到 candle.exe 并使用它而不是您的绑定语句。

在托管代码/vsts/tfs 环境中,我的典型流程是构建定义是事实的来源,它会在构建过程中递增并设置一个内部版本号。 powershell 脚本基于此更新我的 AssemblyInfo 文件中的所有 AssemblyFileVersion 属性,并且我的 wixproj (votive/msbuild) 对此变量进行正则表达式匹配以将其传递给蜡烛。

【讨论】:

以上是关于在 Wix 中修改产品版本的主要内容,如果未能解决你的问题,请参考以下文章

无需卸载的 Wix 安装程序升级

在 Wix 中获取生成的 ProductCode 作为变量

如何实现 WiX 安装程序升级?

Wix FindRelatedProducts找到了一个未安装的产品

卸载升级时如何摆脱wix中未使用的dll

如何设置 Wix 引导程序安装的产品代码