You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF项目如何通过Azure Pipeline追加构建号更新AssemblyVersion?

Azure Pipeline中实现构建号追加到AssemblyVersion的解决方案

问题背景

现有WPF项目托管在Azure Repo分支中,项目Properties目录下的CommonAssemblyInfo.cs配置如下:

[assembly: AssemblyVersion("1.2.0.1")]
[assembly: AssemblyFileVersion("1.2.0.1")]

尝试在azure-pipelines.yml的build阶段后添加Versioning阶段,使用Assembly-Info-NetFramework@3任务更新版本,但任务未生效,需求是提交新代码时将Azure Pipeline构建号追加到AssemblyVersion中。

问题原因分析

  1. 阶段顺序错误:Versioning阶段放在build之后,此时项目已完成编译,修改CommonAssemblyInfo.cs无法影响已生成的程序集。
  2. 变量引用语法错误:配置中使用了${Build.BuildNumber},Azure Pipeline变量的正确引用格式应为$(Build.BuildNumber)。
  3. 路径分隔符问题:Windows风格的**\CommonAssemblyInfo.cs在跨平台代理(如Linux)下可能无法正确匹配文件。
  4. InsertAttributes参数配置不当:文件已存在AssemblyVersion属性,设为true会尝试插入新属性而非替换现有值。

解决方案

1. 调整阶段顺序

将Versioning阶段移至build阶段之前,确保更新程序集版本后再执行编译。

2. 修正任务配置

修改Assembly-Info-NetFramework@3任务的关键参数,确保能正确替换现有版本:

  • 变量引用改为$(Build.BuildNumber)
  • 路径分隔符改为跨平台兼容的**/CommonAssemblyInfo.cs
  • 将InsertAttributes设为false,直接替换现有属性

3. 配置符合要求的构建号格式

程序集版本要求为X.Y.Z.W四段数字格式,需在yml开头定义构建号规则,例如:

name: '1.2.0.$(Build.BuildId)'

这里用Build.BuildId(自增的构建ID)作为版本号的第四段,确保每次构建版本唯一。

完整的yml示例

# 定义构建号格式,符合程序集版本四段数字要求
name: '1.2.0.$(Build.BuildId)'

stages:
- stage: Versioning
  displayName: '自动更新版本'
  jobs:
  - job: Update_Assembly_Version
    steps:
    - task: Assembly-Info-NetFramework@3
      inputs:
        Path: '$(Build.SourcesDirectory)'
        FileNames: '**/CommonAssemblyInfo.cs'
        InsertAttributes: false
        FileEncoding: 'auto'
        WriteBOM: false
        Title: 'Update AssemblyVersion for WFE'
        Product: 'WFE'
        VersionNumber: '$(Build.BuildNumber)'
        FileVersionNumber: '$(Build.BuildNumber)'
        InformationalVersion: '$(Build.BuildNumber)'
        LogLevel: 'verbose'
        FailOnWarning: false
        DisableTelemetry: false

- stage: Build
  displayName: '构建WPF项目'
  dependsOn: Versioning
  jobs:
  - job: Build_Project
    steps:
    - task: NuGetCommand@2
      inputs:
        restoreSolution: '**/*.sln'
    - task: MSBuild@1
      inputs:
        solution: '**/*.sln'
        platform: '$(BuildPlatform)'
        configuration: '$(BuildConfiguration)'

进阶:基于现有版本追加构建号

如果需要保留现有版本的前三段,仅将构建号作为第四段,可通过PowerShell脚本先读取现有版本,再拼接构建号:
在Versioning阶段添加PowerShell步骤:

# 读取现有AssemblyVersion的前三段
$assemblyInfoPath = Join-Path $(Build.SourcesDirectory) "Properties\CommonAssemblyInfo.cs"
$versionMatch = Get-Content $assemblyInfoPath | Select-String 'AssemblyVersion\("([0-9]+\.[0-9]+\.[0-9]+)\.[0-9]+"\)'
$baseVersion = $versionMatch.Matches.Groups[1].Value
# 拼接新版本号
$newAssemblyVersion = "$baseVersion.$(Build.BuildId)"
# 设置为管道变量
Write-Host "##vso[task.setvariable variable=assemblyVersion;]$newAssemblyVersion"

然后在Assembly-Info任务中引用该变量:

VersionNumber: '$(assemblyVersion)'

内容的提问来源于stack exchange,提问作者Rashedul.Rubel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:01:06