我的Wix安装程序的产品版本设置如下:
<Product Version="4.6.0.0" ..>
我在 UI 中显示它,如下所示:
<String Id="WelcomeDlgTitle">{WixUI_Font_Bigger}Welcome to the [ProductName] v[ProductVersion] Setup Wizard</String>
这很好用,但我想省略内部版本号(即 v4.6.0 而不是 v4.6.0.0(。有没有办法做到这一点?
省略 Product/@Version
属性的第 4 个字段,因为 Windows 安装程序无论如何都会忽略它。
<Product Version="4.6.0" ..>
如果确实要保留版本号的第 4 个字段,则必须编写自定义操作来分析字符串并去除第 4 个字段。
谢谢你@zett42,你的评论为我指出了正确的方向 - 我创建了一个 Wix 预处理器扩展,按照这里的文档:http://wixtoolset.org/documentation/manual/v3/wixdev/extensions/extension_development_preprocessor.html
以下是我创建的类:
public class MaterialiserExtension : WixExtension
{
private MaterialiserPreprocessorExtension preprocessorExtension;
public override PreprocessorExtension PreprocessorExtension
{
get
{
if (this.preprocessorExtension == null)
{
this.preprocessorExtension = new MaterialiserPreprocessorExtension();
}
return this.preprocessorExtension;
}
}
}
public class MaterialiserPreprocessorExtension : PreprocessorExtension
{
private static string[] prefixes = { "versionUtil" };
public override string[] Prefixes { get { return prefixes; } }
public override string EvaluateFunction(string prefix, string function, string[] args)
{
string result = null;
switch (prefix)
{
case "versionUtil":
switch (function)
{
case "ToString":
if (0 < args.Length)
{
result = Version.Parse(args[0]).ToString(args.Length >1 && args[1] != null ? int.Parse(args[1]) : 4);
}
else
{
result = String.Empty;
}
break;
}
break;
}
return result;
}
}
有一件事不是很明显 - 在我的Visual Studio Wix项目中,我必须添加-ext "$(SolutionDir(Materialiser.Wix\bin\Release\Materialiser.Wix.dll" 到 Properties (Alt+Enter(> 工具设置>编译器 (蜡烛( 和链接器(光(中的相同。
使用起来非常简单:在我的 .wxs 文件中,我定义了一个这样的属性:
<?define ProductVersion="4.6.0.5" ?>
然后我在产品中使用它,如下所示:
<Product Version="$(var.ProductVersion)" .. >
然后我创建一个这样的新属性:
<Property Id="VersionWithNoBuildNumber" Value="$(versionUtil.ToString([ProductVersion], 3))" />
在我的 .wxl 文件中,我正常使用它:
<String Id="WelcomeDlgTitle">{WixUI_Font_Bigger}Welcome to the [ProductName] v[VersionWithNoBuildNumber] Setup Wizard</String>
我希望这也对其他人有所帮助:p