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

如何将Azure DevOps构建号关联到ASP.NET Core Web API并读取

解决Azure App Service中ASP.NET Core API读取构建号的问题

你当前的问题核心在于:YAML管道里设置的BUILD_NUMBER只是构建过程的临时环境变量,并不会自动同步到Azure App Service的运行环境中,所以API里无法读取到该值。下面是几种可行的解决方案:


方案一:通过部署步骤将构建号注入App Service应用设置

在Azure DevOps部署阶段,把构建号添加为App Service的应用设置(对应运行环境的环境变量),具体步骤如下:

1. 使用Azure App Service Deploy任务传递

修改YAML中的部署任务,添加appSettings参数传入构建号:

- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy to Azure App Service'
  inputs:
    azureSubscription: '你的Azure订阅名称'
    WebAppName: '你的App Service名称'
    packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
    appSettings: '-BUILD_NUMBER $(Build.BuildNumber)'

部署完成后,App Service的应用设置中会新增BUILD_NUMBER项,此时API里用Environment.GetEnvironmentVariable("BUILD_NUMBER")即可正常读取。

2. 使用Azure CLI命令设置(灵活度更高)

如果采用Azure CLI部署,可添加以下任务直接设置应用配置:

- task: AzureCLI@2
  displayName: 'Set BUILD_NUMBER in App Service'
  inputs:
    azureSubscription: '你的Azure订阅名称'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az webapp config appsettings set --name "你的App Service名称" --resource-group "你的资源组名称" --settings BUILD_NUMBER=$(Build.BuildNumber)

方案二:构建时将构建号嵌入应用配置文件

直接在构建阶段修改appsettings.json,把构建号写入配置,API通过配置系统读取:

1. YAML中添加修改配置的脚本

Linux环境(bash脚本):

- script: |
    sed -i 's/"BuildNumber": ""/"BuildNumber": "$(Build.BuildNumber)"/g' $(Build.SourcesDirectory)/你的项目目录/appsettings.json
  displayName: 'Update BuildNumber in appsettings.json'

Windows环境(PowerShell脚本):

- task: PowerShell@2
  displayName: 'Update BuildNumber in appsettings.json'
  inputs:
    targetType: 'inline'
    script: |
      (Get-Content $(Build.SourcesDirectory)/你的项目目录/appsettings.json) -replace '"BuildNumber": ""', '"BuildNumber": "$(Build.BuildNumber)"' | Set-Content $(Build.SourcesDirectory)/你的项目目录/appsettings.json

2. API中读取配置

先在appsettings.json中添加默认配置项:

{
  "BuildNumber": ""
}

然后通过依赖注入的IConfiguration读取:

using Microsoft.Extensions.Configuration;

// 在控制器/服务构造函数中注入IConfiguration
private readonly IConfiguration _configuration;

public YourController(IConfiguration configuration)
{
    _configuration = configuration;
}

// 读取构建号
string buildNumber = _configuration["BuildNumber"] ?? "not available";

方案三:将构建号嵌入程序集版本信息

把构建号作为程序集版本的一部分,通过反射读取:

1. YAML中设置发布版本

在发布步骤中传递构建号作为版本后缀:

- script: |
    dotnet publish -c Release /p:Version=1.0.0.$(Build.BuildNumber)
  displayName: 'Publish with Build Number'

2. API中通过反射读取

using System.Reflection;

var assembly = Assembly.GetExecutingAssembly();
var version = assembly.GetName().Version;
string buildNumber = version?.Build.ToString() ?? "not available";

内容的提问来源于stack exchange,提问作者Sharpeye500

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:35:07