2

I have a product where the customers expect a 3 part version number like 1.2.3 but internally we use 1.2.3.4. The version is set automatically in the Wix installer, so how do I drop the last number (4)?.

Context

The last number, in the example '4', is the subversion commit number that is automatically generated. Our customers do not want to see "release 5.6.1.7654" but want to see "release 5.6.1". That is the nature of our market. We do display the full number in the Help | About dialog.

Implementation

In the Wix XML we have:

  <?define ProductVersion="!(bind.FileVersion.MyExe)" ?>
      :
  <Product 
      :
       Version="$(var.ProductVersion)"
      :

How do I format the $(var.ProductVersion) from X.X.X.X to X.X.X?

Thanks in advance

Rob

4

3 回答 3

1

为此有一个特殊的程序集属性,AssemblyInformationalVersion. 这将是最佳选择,因为它还允许您指定文本,例如“Release 5.6.1 RC1”。但是,我不确定WIX 工具集是否支持它

您可以做的另一件事是AssemblyInfo.cs在您的项目/解决方案中使用全局技术。在该文件中定义AssemblyVersionAssemblyFileVersion,因为您希望它们呈现给用户,并在您的其他程序集上继续使用 4 阶段增量内部版本号。

于 2013-02-19T07:18:08.257 回答
0

您可以使用预处理器而不是活页夹来完成所有这些工作。反正我就是这样做的。我编写了一个预处理器扩展,它将版本号(字符串)作为参数并返回一个新的。所以你也可以这样做,例如:

switch (function)
{
    case "TruncateVersion":
        // validate version number here
        return args[0].Substring(0, args[0].LastIndexOf('.'));
}

这是关于如何扩展预处理器的链接:http ://wix.sourceforge.net/manual-wix3/extension_development_preprocessor.htm

然后,您可以使用$(version.TruncateVersion($(var.MyProject.TargetPath))).

当然,这只是路径。您可以使用该类提取文件版本FileVersionInfo或直接从您的 AssemblyInfo.cs 文件中获取它。

或者,如果您希望在绑定时完成这项工作,您可以编写一个活页夹扩展。不幸的是,目前 WiX 扩展的文档很少,只有预处理器似乎有完整的文档示例。尽管我在这里和那里看到了 Heat 扩展的片段。

随时通过检查 WiX 源代码或搜索网络来证明我错了。祝你好运!

编辑

忘了提。您不能使用此语法: $(version.TruncateVersion(!(bind.fileVersion.FileID)))

这是因为以'$'开头的预处理器变量在绑定变量被以'!'开头的绑定变量解析之前被解析。.

但是,您可以做相反的事情: !(bind.fileVersion.$(var.MyProject.TargetPath))

于 2013-02-20T00:28:04.563 回答
0

最简单的方法是在项目中有 assemblyversionInfo 并使用此文件中的版本号

在此处输入图像描述

于 2013-02-20T23:19:47.377 回答