如何从 tfs2015 中的不同项目访问 $(Build.BuildNumber)

how to access $(Build.BuildNumber) from different project in tfs2015

有两个项目,例如。项目 1 和项目 2。 现在在 project2 中,我们需要创建一个发布定义,我们需要在其中复制 project1 的构建定义的构建输出。

问题是我们无法在 Project2 版本中将工件作为 Project1 构建定义的工件。

如果我们可以从Project2访问project1的$(Build.BuildNumber)变量,问题就解决了。

请推荐。

谢谢。

TFS 上 link 其他团队项目构建工件现在没有此功能,但作为解决方法,您可以添加 Windows 机器文件副本 Project2 的发布定义中的任务,用于从 Project1 复制工件。这个question供大家参考。

您可以通过 REST API 访问内部版本号,简单的步骤:

  1. 使用以下代码在您的项目中创建一个新的 powershell 脚本文件:

代码:

Param(
    [string]$teamProject,
    [string]$collectionURL,
    [string]$buildId,
    [string]$userName,
    [string]$password
    )
$basicAuth = ("{0}:{1}" -f $userName,$password)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = @{Authorization=("Basic {0}" -f $basicAuth)}
$url="$($collectionURL)$($teamProject)/_apis/build/builds/$($buildId)?api-version=2.0"
Write-Output $url
Function GetBuildNumber{
    $result = Invoke-RestMethod -Uri $url -headers $headers -Method Get
    Write-Output $result.buildNumber
    Write-Host "##vso[task.setvariable variable=anotherBuildNumber;]$($result.buildNumber)"
}
GetBuildNumber
  1. 查看源代码管理
  2. 排队构建和发布工件
  3. 编辑您的发布定义
  4. 添加这些变量

  1. 将 PowerShell 任务添加到您的发布定义中。

    脚本文件名:[工件中的 powershell 脚本文件,例如$(System.DefaultWorkingDirectory)/PowerShellVnext/TFS2015U2Solution/PowerShellModuleProject1/RestTest.ps1];

    参数:-teamProject $(teamProject) -collectionURL $(System.TeamFoundationCollectionUri) -buildId $(buildId) -userName $(用户名) -passwor $(密码)

之后,内部版本号值存储在 anotherBuildNumber 变量中。

简单,用一点反射魔法

var version = typeof(Program).Assembly
              .GetCustomAttribute<AssemblyFileVersionAttribute>().Version;

您可以将 typeof([ClassName]) 替换为您喜欢的任何 class 名称,甚至可以从反射类型中获取版本。此技术在记录错误时非常有用,因为您还可以从依赖程序集获取文件版本,范围内的任何 class。

这不是您要的,但是,我相信有些人也需要它。.如果您需要构建日期,您可以通过以下方式获得:

var date = new FileInfo(typeof(Program).Assembly.Location).CreationTime;