【问题标题】:How to get current wpf project assembly version in wix toolset bootstrapper project?如何在 wix 工具集引导程序项目中获取当前的 wpf 项目程序集版本?
【发布时间】:2020-03-06 13:46:21
【问题描述】:

我有一个 wpf 项目,其安装程序是由 wix setup 项目创建的。编译 wix 设置项目以获取 .msi。 .exe 是使用 wix bootstrapper 项目从 .msi 文件生成的。现在我的问题是如何从 wpf .cs 文件中获取程序集版本 [assembly: AssemblyFileVersion("x.x.x.xx")]?

【问题讨论】:

  • 你不会把它从一个 cs 文件中取出来。 Wix 对编译到您的应用程序中的代码一无所知。你需要像这样从exe中删除它。 stackoverflow.com/questions/626033/…
  • 它在 Bundle.wxs 中不起作用。

标签: wpf wix bootstrapper


【解决方案1】:

Andy 是对的,您将无法从 .cs 文件中提取版本号,因为 WiX 不编译也不知道与 C# 代码有任何关系。

您要做的是使用程序集版本属性对主要可执行文件(可能是 .csproj 应用程序)进行版本控制。 (这些可以在项目属性中找到)

1) 在 Product.wxs 中将所述主要可执行文件作为文件添加到安装程序中。

<Component Id='MainExecutable' Guid='*'>
    <File Id='MainExe' Name='MainExe.exe' Source='Path-to-exe' KeyPath='yes' /> 
</Component>

2) 将 .msi 的版本绑定到这个主可执行文件。这是在 Product 元素的 Version 属性中完成的。

<Product Id="*" Name="My Product Name" Language="1033" Version="!(bind.FileVersion.MainExe)" Manufacturer="Debabrata" UpgradeCode="PUT-GUID-HERE">

FileVersion 后面的值并不是文件的 ID。这很重要。

现在在引导程序项目中使用这个版本号 - 过程非常相似。

1) 将 MSI 添加到引导程序。

<MsiPackage SourceFile="Path-to-msi" Id="MyMSI"> 

2) 在 Bundle 元素的 Version 属性中,绑定应该是。

<Bundle Name="My Bundle" Version="!(bind.packageVersion.MyMSI)">

同样,请注意 ID 是如何匹配的。

希望这会有所帮助!

【讨论】:

  • 谢谢瑞恩。看起来挺好的。帮我用 .exe 名称动态绑定项目版本。喜欢 ProductName_V_1_0_0_1.exe
  • 这是您希望引导标题的格式吗? MSI 还是两者都有?
  • @RyanThomas,我有一个类似的查询 - 我想根据 ARP 中的特定格式显示产品版本。类似于:Major.Minor.Build “some string” Revision。示例:“3.3.0 构建 144”。有什么建议吗?
  • @ArNumb 我不确定你所说的 ARP 是什么意思。但是您可以使用 !(bind.property.ProductVersion.Major) 来获取产品中版本号的特定部分。请参阅此处的 WiX 文档。 wixtoolset.org/documentation/manual/v3/overview/light.html
  • 谢谢@RyanThomas。通过 ARP,我的意思是添加删除程序(在控制面板内)。我已经将 !(bind.property...) 用于我的捆绑包。但它似乎只取整数值。我希望我的产品的控制面板条目在版本字段中显示字符串类型的值。类似于:3.3.0 xxx 144(其中 xxx 是一些可自定义的字符串。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2020-05-09
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多