【问题标题】:How can I automate supplying a version in appxmanifest?如何自动在 appxmanifest 中提供版本?
【发布时间】:2019-07-18 12:06:10
【问题描述】:

我正在将桌面桥用于 WPF 桌面应用程序,并希望在构建期间自动创建我的 msix 包。我不想在源代码管理中存储任何版本信息。

解决方案中的 WPF 项目使用gitversion msbuild 任务在每次构建完成时自动推断我的可执行文件的版本。 不幸的是,我不确定.appxmanifest 是否存在类似的机制。

我的想法是,将它与构建过程很好地集成在一起会很好,类似于 gitversion,但我无法找到任何关于我在构建期间的选项或 Create App 的文档包进程。

也许在构建过程中有一些我不知道可以对.appxmanifest 执行的转换步骤?或者也许有办法让版本始终反映被捆绑的可执行文件的版本?

(MSDN forums question)

【问题讨论】:

  • 如果我使用Visual Studio生成包,它会自动增加版本号。我不确定当您使用它生成包时,MSBuild 是否会做同样的事情。我建议为您的问题添加“msbuild”标签。
  • 是的,但当然增加版本意味着您将其存储在源代码管理中,这是我不想要的。添加了msbuild,感谢您的建议。
  • 你的意思是要把wpf版本和.appxmanifest文件里的版本匹配一下吗?
  • 其他方式。我希望 .appxmanifest 与我的 WPF 版本匹配。

标签: wpf msbuild continuous-integration desktop-bridge appxmanifest


【解决方案1】:

您应该在创建包之前修改构建管道中的.appxmanifest 文件。毕竟,它只是一个基于文本的 XML 文件。

如果您使用的是 Azure Pipelines,则可以使用 Powershell 任务和每次构建都会递增的计数器变量来完成此操作:

    pool: 
      vmImage: vs2017-win2016
    variables:
      buildPlatform: 'x86'
      buildConfiguration: 'release'
      major: 1
      minor: 0
      build: 0
      revision: $[counter('rev', 0)]
    steps:
    - powershell: |
       [Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq")
       $path = "Msix/Package.appxmanifest"
       $doc = [System.Xml.Linq.XDocument]::Load($path)
       $xName =
         [System.Xml.Linq.XName]
           "{http://schemas.microsoft.com/appx/manifest/foundation/windows10}Identity"
       $doc.Root.Element($xName).Attribute("Version").Value =
         "$(major).$(minor).$(build).$(revision)";
       $doc.Save($path)
      displayName: 'Version Package Manifest'
    +Build, Package and Sign.

请参阅this MSDN Magazine article 了解更多信息以及如何使用 Azure Pipelines 设置持续集成 (CI)、持续部署 (CD) 和自动更新旁载 MSIX 打包 WPF 应用程序的完整示例。

【讨论】:

  • 我不得不将$xName = 行修改为$xName = System.Xml.Linq.XName]::Get(http://schemas.microsoft.com/appx/manifest/foundation/windows10}Identity")。不确定这是否特定于我的设置。
【解决方案2】:

您必须在打包前更新清单。查看这个示例,包括一个 powershell 脚本,以使用提供的 gitversion 戳 xml。 https://github.com/microsoft/devops-for-windows-apps/blob/master/azure-pipelines.yml#L72

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 2012-10-07
    相关资源
    最近更新 更多