如何从 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 访问内部版本号,简单的步骤:
- 使用以下代码在您的项目中创建一个新的 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
- 查看源代码管理
- 排队构建和发布工件
- 编辑您的发布定义
- 添加这些变量
将 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;
有两个项目,例如。项目 1 和项目 2。 现在在 project2 中,我们需要创建一个发布定义,我们需要在其中复制 project1 的构建定义的构建输出。
问题是我们无法在 Project2 版本中将工件作为 Project1 构建定义的工件。
如果我们可以从Project2访问project1的$(Build.BuildNumber)变量,问题就解决了。
请推荐。
谢谢。
TFS 上 link 其他团队项目构建工件现在没有此功能,但作为解决方法,您可以添加 Windows 机器文件副本 Project2 的发布定义中的任务,用于从 Project1 复制工件。这个question供大家参考。
您可以通过 REST API 访问内部版本号,简单的步骤:
- 使用以下代码在您的项目中创建一个新的 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
- 查看源代码管理
- 排队构建和发布工件
- 编辑您的发布定义
- 添加这些变量
将 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;