如何自动化在appxmanifest中提供一个版本号?

7
我正在使用桌面桥接为WPF桌面应用程序,并希望在构建期间自动创建我的msix包。我不想在源代码控制中存储任何版本信息。
解决方案中的WPF项目使用gitversion msbuild任务,在每次构建时自动推断我的可执行文件的版本。不幸的是,我不确定是否存在类似的机制用于.appxmanifest
我的想法是将其与构建过程集成得更好,类似于gitversion,但我还没有找到有关构建期间或创建应用程序包过程中选项的任何文档。
也许在构建期间有一些转换步骤,我不知道是否可以对.appxmanifest进行处理?或者也许有一种方法可以始终反映被捆绑的可执行文件的版本?

(MSDN论坛问题)


如果我使用Visual Studio生成包,它会自动增加版本号。我不确定当您使用MSBuild生成包时是否会执行相同的操作。我建议为您的问题添加'msbuild'标签。 - Bite
没错,但是增加版本意味着你要将其存储在源代码控制中,而我不想这样做。添加了msbuild,感谢建议。 - Alexander Trauzzi
你的意思是想将WPF版本与.appxmanifest文件中的版本匹配吗? - Nico Zhu
反过来。我希望.appxmanifest与我的WPF版本匹配。 - Alexander Trauzzi
2个回答

6
在构建软件包之前,您应该修改构建管道中的.appxmanifest文件。毕竟,它只是一个基于文本的XML文件。
如果您正在使用Azure管道,您可以通过使用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.

请参考此MSDN Magazine文章,了解如何使用Azure Pipelines设置持续集成(CI)、持续部署(CD)和自动更新侧载的MSIX打包的WPF应用程序的完整示例。请注意保留HTML标记。

我不得不修改$xName =这一行,改为$xName = System.Xml.Linq.XName]::Get(http://schemas.microsoft.com/appx/manifest/foundation/windows10}Identity")。不确定这是否特定于我的设置。 - Felix

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接