在Wix中,如何将版本从X.X.X.X格式化为X.X.X

时间:2013-02-19 07:00:34

标签: .net installer wix versioning

我有一个产品,客户期望3件版本号如1.2.3,但在内部我们使用1.2.3.4。版本在Wix安装程序中自动设置,那么如何删除最后一个数字(4)?

上下文

示例'4'中的最后一个数字是自动生成的subversion提交号。我们的客户不希望看到“版本5.6.1.7654”,但希望看到“版本5.6.1”。这就是我们市场的本质。我们在帮助中显示完整的数字关于对话框。

实施

在Wix XML中我们有:

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

如何将$(var.ProductVersion)从X.X.X.X格式化为X.X.X?

提前致谢

罗布

3 个答案:

答案 0 :(得分:1)

有一个特殊的汇编属性,AssemblyInformationalVersion。这将是最好的选择,因为它还允许您指定文本,例如“Release 5.6.1 RC1”。 但是,我不确定WIX toolset support it yet

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

答案 1 :(得分: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)))

这是因为预处理器变量(从&#39; $&#39; 开始)在绑定变量由绑定器解析之前解析 &#39;!&#39;

但是,您可以这样做:!(bind.fileVersion。$(var.MyProject.TargetPath))

答案 2 :(得分:0)

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

enter image description here