2013-02-19 22 views
2

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

语境

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

实施

在维克斯XML我们:

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

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

在此先感谢

罗布

回答

1

有一个特殊的组装性意味着这个,AssemblyInformationalVersion。这将是最好的选择,因为它还允许您指定文本,如“版本5.6.1 RC1”。 但是,我不确定WIX toolset support it yet

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

+0

HI Magnus,程序集的AssemblyInfo.cs文件中已经有版本号并且已经被编译。我的问题是如何格式化从Wix中的信息返回的版本。也就是在构建安装程序时。不是组件。 – 2013-02-19 07:25:15

+0

啊...进一步调查我看你说什么......谢谢。 – 2013-02-19 08:59:01

+0

目标应用程序是.Net 2.0,它看起来像WIX不支持此属性。所以,内容丰富但不实用。 :-) – 2013-02-19 09:03:12

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)。)

0

最简单的方法将是有assemblyversionInfo项目,并从该文件

使用的版本号

enter image description here