如何将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
相关产品推荐
相关产品推荐

