如何从 ASP.NET 应用程序内部访问 `Build.BuildNumber` Azure 变量?

How can I access the `Build.BuildNumber` Azure variable from the inside of an ASP.NET application?

如何从 ASP.NET 应用程序内部访问 Build.BuildNumber Azure 变量?

它是否与装配编号相同并且可以使用 (source) 检索?

Assembly web = Assembly.Load("App_Code");
AssemblyName webName = web.GetName();

string myVersion = webName.Version.ToString();

我是说this Build.BuildNumber:

The name of the completed build, also known as the run number. You can specify what is included in this value.

A typical use of this variable is to make it part of the label format, which you specify on the repository tab.

Note: This value can contain whitespace or other invalid label characters. In these cases, the label format will fail.

This variable is agent-scoped, and can be used as an environment variable in a script and as a parameter in a build task, but not as part of the build number or as a version control tag.

管道中生成的内部版本号与代码中的版本号之间没有直接关系。怎么可能呢,因为要做到这一点,需要更改代码以使代码包含内部版本号。

但是,有些构建任务能够做到这一点:获取 devops 管道构建号并将其注入代码中。

我使用 this project 中的 VersionAssemblies 和 VersionDotNetCoreAssemblies 任务。

您必须指定内部版本号的配置方式,请参阅 the docs。然后你必须 运行 在实际构建完成之前完成任务。

yaml 管道看起来与此类似:

name: '1.$(date:yyyy).$(DayOfYear)$(rev:.r)'

<snip>

          - task: VersionDotNetCoreAssemblies@2
            inputs:
              Path: '$(Build.SourcesDirectory)'
              VersionNumber: '$(Build.BuildNumber)'
              Injectversion: False
              VersionRegex: '\d+\.\d+\.\d+\.\d+'
              FilenamePattern: '.csproj'
              AddDefault: true
              OutputVersion: 'OutputedVersion'

然后,在代码中我们可以这样做:

var version = assembly.GetName().Version.ToString();

输出将类似于:

1.2021.109.1

找到构建任务的完整文档here。还有 .Net Framework(不是 .Net Core)程序集的任务。

如果您想使用内部版本号对 DLL 进行版本控制,那么最好的方法是 此处。

但是,如果您想在代码中访问内部版本号,可以通过以下方式进行:

var buildNumber = Environment.GetEnvironmentVariable("Build_BuildNumber", EnvironmentVariableTarget.Process);