2017-03-31 85 views
1

我只发布这是由我的TFS生成定义一个生成的二进制文件和每个版本接收一个唯一的版本号(1.0。$ YY $ DAYOFYEAR。$ REV)。构建名称的名称包含此版本号。版本号由PowerShell脚本设置为程序集版本和二进制文件版本。我只有一个构建结果rentention(包括我投递文件夹中生成的二进制文件)为60天,现在我想知道:我将如何可能找出一些版本号是一岁,其变更集它是从让建我可以看看源代码或重建完整的二进制文件?我是否必须在构建期间以某种方式添加变更集信息?我必须在构建期间设置的版本号中对变更集编号进行编码吗?这两个想法似乎都不是很巧妙。如何找出TFS 2015构建的变更集是从?

回答

1

我终于想出了一个PowerShell脚本,我钩到我的生成定义为只是之后的一个步骤是一个类似于建议here额外的构建步骤,设定的版本属性中的所有AssemblyInfo.cs文件:

$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和版本的信息。

+0

当你自己修复它时总会更好,因为解决方案最适合你的场景!:) –

1

你可以添加一个PowerShell脚本或extension task将生成的发行说明作为TFS vNext构建的一部分。你会得到的东西如下:

enter image description here

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

+0

我更喜欢直接在二进制或在TFS的信息“版本变更”的一些存储。发行说明很容易丢失,因为有人只将二进制文件复制到其他地方。然而,它是记录相关工作项和提交的有趣机制。将尝试记住你的建议。 – David

1

前言:XAML建立。

您可以清楚地了解自己的所有构建产品,通过创建发布/修补程序分支,并具有建立具体到这些分支的定义。将构建版本克隆到分支是很容易的,并且使用版本号作为二进制邮票的一部分。我更喜欢使用分支版本号方法,并使用该版本号来加印我的二进制文件。只要你在每个分支的二进制创造独特的生成定义,你就可以轻松地查看过去的版本,看看到底是什么的变更与您需要it.All是二进制的版本号相关联,和你”将能够轻松地追溯到源代码。 enter image description here

+0

您的解决方案针对XAML构建,是否正确? – David

+0

是的,我在我的回答中作了前言。:) –

+0

对不起,我忘了提及我正在使用vNext构建定义。 – David