有两个项目,例如。 Project1和Project2。现在在project2中,我们需要创建一个发布定义,我们需要复制project1的构建定义的构建输出。
问题是我们不能像Project2版本中的Project1构建定义那样提供工件。
如果我们可以从Project2访问project1的$(Build.BuildNumber)变量,那么prolem将被解决。
请建议。
谢谢。
您可以通过REST API访问构建号,步骤简单:
码:
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
之后,内部版本号值存储在anotherBuildNumber变量中。
现在没有在TFS上链接其他团队项目构建工件的功能,但作为一种解决方法,您可以在Project2的发行版定义中添加Windows机器文件复制任务,以从Project1复制工件。这个question供您参考。
简单,使用一点反射魔法
var version = typeof(Program).Assembly
.GetCustomAttribute<AssemblyFileVersionAttribute>().Version;
您可以将typeof([ClassName])替换为您喜欢的任何类名,以从甚至反射类型中获取版本。这种技术在记录错误时非常有用,因为您可以从依赖程序集获取文件版本,也可以在范围内获取任何类。
这不是你要求的,但是,我确信有些人也需要这个......如果你需要构建日期,你可以通过使用:
var date = new FileInfo(typeof(Program).Assembly.Location).CreationTime;