如何为 Azure Pipeline 中创建的 .msixupload 文件自动增加包版本号?

问题描述

我正在使用 Azure Pipeline,当我提交到我的 GitHub 存储库时,它会自动运行。 .yml 文件生成一个 .msixupload 文件(用于 UWP)以上传到 Microsoft Store。但是,我无法上传生成的 .msixupload 文件,因为 .appxmanifest 文件中的版本号永远不会改变,我正在尝试为现有应用程序构建更新。每次运行 Azure Pipeline 时如何增加版本号?

我已经尝试添加

<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>

到此处描述的 .appxmanifest 文件How do I auto increment the package version number?,但这没有任何区别。

解决方法

您可以使用 powershell 脚本更改 appxmanifest 文件中的版本值。见下例:

在您的 yaml 管道中。您可以设置如下变量:有关 counter 表达式的详细信息,请参阅 here

variables:
  major: 1
  minor: 0
  build: $(Build.BuildId)
  version:  $[counter(variables['major'],0)]  

然后添加 powershell 任务以运行以下脚本以更新版本值:

  - 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'

请查看this document了解更多信息。

因为 appxmanifest 文件只是基于文本的 XML 文件。您还可以使用扩展工具 Magic Chunks task 更改 appxmanifest 文件中的版本值。例如,检查 this thread