如何在tfs构建服务器上获取当前changesetid?

问题描述:

我需要在TFS构建服务器的assemblyversions中包含changesetid。我创建了更新[AssembliVersion]属性的所有assemblyinfo.cs的powershell脚本。如何在tfs构建服务器上获取当前changesetid?

如何获取tfs中文件夹的当前变更集?

目前我有这样的事情:

function GetLatestChangeset{ 
    Param([string]$projectDir) 

    $changesetId = Get-TfsItemHistory $projectDir -Recurse -version:W | % ChangesetId | sort -Descending 
    if ($changesetId.Count -eq 0){ 
     return 0 
    } 
    return $changesetId[0] 
} 

但它返回最新变更ID,而不是一个正在兴建

如果您在门控签入的范围和内这样做变更尚未提交,则不会有“当前”变更集。我们做类似的事情,但是在构建完成之后,然后简单地查询构建服务器以获得如下的最新构建;

var buildDetail = context.GetExtension<IBuildDetail>(); 
    var vcserver = buildDetail.BuildServer.TeamProjectCollection.GetService<VersionControlServer>(); 

    var queryHistoryResult = vcserver 
           .QueryHistory(versionControlPath, VersionSpec.Latest, 0, 
               RecursionType.Full, null, null, null, 1, 
               true, false) 
           .Cast<Changeset>() 
           .ToList(); 

    if (!queryHistoryResult.Any()) 
    { 
     throw new ChangesetNotFoundException("GetLatestChangesetActivity: No current changeset available."); 
    } 

    var changeset = queryHistoryResult.First(); 

它看起来几乎与您的代码相同。

+0

我不在门控签入范围内执行。问题是,当这个脚本执行时,可能会有更新的变更集,因为正在构建的变更集已经是 – Liero

要从指定的构建中获取关联的变更集摘要,可以使用InformationNodeConverters.GetAssociatedChangesets Method

+0

,但我仍然不知道如何使用它。如何获得IBuildDetail的实例? – Liero

如果您使用的是新的构建系统,你应该能够使用环境变量$ ENV:BUILD_SOURCEVERSION 见:https://msdn.microsoft.com/en-us/library/vs/alm/build/scripts/variables

对于XAML构建,你可以使用TF_BUILD_SOURCEGETVERSION环境变量:https://msdn.microsoft.com/en-us/library/hh850448%28v=vs.120%29.aspx