Wpf 如何在appxmanifest中自动提供版本?

Wpf 如何在appxmanifest中自动提供版本?,wpf,msbuild,continuous-integration,desktop-bridge,appxmanifest,Wpf,Msbuild,Continuous Integration,Desktop Bridge,Appxmanifest,我正在为WPF桌面应用程序使用桌面桥,并希望在构建期间自动创建msix包。我不想在源代码管理中存储任何版本信息 解决方案中的WPF项目使用msbuild任务在每次生成时自动推断可执行文件的版本。 不幸的是,我不确定.appxmanifest是否存在类似的机制 我的想法是,与gitversion类似,将其与构建过程很好地集成会很好,但我还没有找到任何关于构建或创建应用程序包过程中我的选项的文档 也许在构建过程中有一些我不知道的转换步骤可以对.appxmanifest?或者有一种方法可以让版本始终反

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

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

我的想法是,与gitversion类似,将其与构建过程很好地集成会很好,但我还没有找到任何关于构建或创建应用程序包过程中我的选项的文档

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


()

打包前必须更新清单。请查看此示例,其中包含一个powershell脚本,用于使用提供的gitversion戳出xml

在创建包之前,您应该修改构建管道中的
.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.

有关如何使用Azure管道设置侧面加载的MSIX打包WPF应用程序的连续集成(CI)、连续部署(CD)和自动更新的详细信息和完整示例,请参阅。

如果我使用visual studio生成包,它将自动增加版本号。我不确定当您使用MSBuild生成包时,它是否执行相同的操作。我建议为您的问题添加“msbuild”标记。对,但当然,增加版本意味着您将其存储在源代码管理中,我不希望这样。添加了msbuild,感谢您的建议。您的意思是要将wpf版本与.appxmanifest文件中的版本相匹配吗?反之亦然。我希望
.appxmanifest
与我的WPF版本相匹配。