如何确定TFS 2015构建的变更集是从哪个构建的?

时间:2017-03-31 18:27:39

标签: c# tfs tfs2015

我只分发由我的一个TFS构建定义构建的二进制文件,每个构建版本都会收到一个唯一的版本号(1.0。$ yy $ dayofyear。$ rev)。构建名称的名称包含此版本号。版本号由PowerShell脚本设置为程序集版本和二进制文件的文件版本。我只有60天的构建结果保留(包括我的drop文件夹中的构建二进制文件),现在我想知道:我怎么可能想出一些版本号,这是一年的变换集,它是由我构建的可以查看源代码或重建二进制文件?我是否必须在构建期间以某种方式添加变更集信息?我是否必须在构建期间设置的版本号中对变更集编号进行编码?这两种想法看起来都不是很巧妙。

3 个答案:

答案 0 :(得分:1)

您可以添加powershell脚本或extension task,它将生成发布说明作为TFS vNext构建的一部分。您将获得以下内容:

enter image description here

然后你可以存储它,因为源代码看看这个blog

答案 1 :(得分:1)

前言:XAML构建。

您可以通过创建发布/修补程序分支以及具有特定于这些分支的构建定义来查看所有构建产品。将构建克隆到分支并使用版本号作为二进制戳的一部分非常容易。我更喜欢使用分支版本号方法,并使用该版本号标记我的二进制文件。只要您为每个分支中的二进制文件创建唯一的构建定义,您就可以轻松查看过去的构建,并确切地查看与之关联的变更集。您需要的是二进制文件&#39 ; s版本号,您可以轻松地将其追溯到源代码。 enter image description here

答案 2 :(得分:1)

我终于提出了一个PowerShell脚本,我将其挂钩到我的构建定义中,作为一个额外的构建步骤,就像一个类似于在AssemblyInfo.cs中设置版本属性的here提议的步骤之后} files:

$systDefinitionId = $env:SYSTEM_DEFINITIONID
$buildDefVersion = $env:BUILD_DEFINITIONVERSION
$buildDefName = $env:BUILD_DEFINITIONNAME
$buildSourceVersion = $env:BUILD_SOURCEVERSION
$buildSourceBranch = $env:BUILD_SOURCEBRANCH

$SrcPath = $env:BUILD_SOURCESDIRECTORY
$AllVersionFiles = Get-ChildItem $SrcPath AssemblyInfo.cs -recurse
$AllVersionFilesCount = ($AllVersionFiles | Measure-Object).Count

Write-Verbose "Updating $AllVersionFilesCount AssemblyInfo.cs files in path ""$SrcPath"" with source information."  -Verbose

Write-Verbose "ID of build definition:      $systDefinitionId" -Verbose
Write-Verbose "Version of build definition: $buildDefVersion" -Verbose
Write-Verbose "Name of build definition:    $buildDefName" -Verbose
Write-Verbose "Changeset to build:          $buildSourceVersion" -Verbose
Write-Verbose "Branch to build from:        $buildSourceBranch" -Verbose

foreach ($file in $AllVersionFiles)
{
(Get-Content $file.FullName) |
    %{$_ -replace 'AssemblyProduct\(""\)', "AssemblyProduct(""$buildDefName / $buildSourceVersion"")" } |
    %{$_ -replace 'AssemblySourceBranch\(""\)', "AssemblySourceBranch(@""$buildSourceBranch"")" } |
    %{$_ -replace 'AssemblySourceChangeset\(0\)', "AssemblySourceChangeset($buildSourceVersion)" } |
    %{$_ -replace 'AssemblyBuild\(""\)', "AssemblyBuild(@""$buildDefName / ID: $systDefinitionId / Version: $buildDefVersion"")" } |
Set-Content $file.FullName -Force
}

我正在修改AssemblyProduct属性,方法是在其中写入构建定义名称和用于创建二进制文件的变更集。稍后,此信息在详细信息选项卡上的Windows资源管理器中的exe或dll属性上可见。

此外,我已定义自定义属性AssemblySourceBranchAssemblySourceChangesetAssemblyBuild以提供更详细的信息。它们都具有相同的结构,因此为简洁起见,只有AssemblySourceChangeset的源代码:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class AssemblySourceChangesetAttribute : Attribute
{
  public AssemblySourceChangesetAttribute(uint changeset)
  {
    Changeset = changeset;
  }

  public uint Changeset { get; }
}

如果“公开”可见产品字段中的信息不足以重建二进制文件,那么仍然可以反映在exe或dll上并读取那些在源分支上有信息的自定义属性, id和存储的构建定义的版本。