我只分发由我的TFS构建定义之一构建的二进制文件,并且每个构建都收到一个唯一的版本号($yy$ only .$rev)。生成名称的名称包含此版本号。版本号由PowerShell脚本设置为程序集版本和二进制文件版本。我只有60天的构建结果(包括在我的drop文件夹中构建的二进制文件),现在我想知道:我如何才能计算出某个版本号,这个版本号有一年的历史,可以更改它的生成,这样我就可以查看源代码或者重新构建二进制文件了吗?我是否必须在构建过程中显式地添加变更集信息?是否必须在生成期间设置的版本号中对更改集编号进行编码?这两种想法似乎都不太灵巧。
发布于 2017-04-04 18:52:24
最后,我想出了一个PowerShell脚本,我将其钩入到构建定义中,作为一个额外的构建步骤,该步骤与建议的这里类似,该步骤在所有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属性上可见。
此外,我还定义了自定义属性AssemblySourceBranch、AssemblySourceChangeset和AssemblyBuild,以提供更详细的信息。它们都具有相同的结构,因此为了简洁起见,只使用AssemblySourceChangeset的源代码。
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public class AssemblySourceChangesetAttribute : Attribute
{
public AssemblySourceChangesetAttribute(uint changeset)
{
Changeset = changeset;
}
public uint Changeset { get; }
}如果“公共”可见产品字段中的信息不足以重建二进制文件,则仍然可以对exe或dll进行反思,并读取那些在源分支、id和版本中存储的自定义属性。
发布于 2017-04-03 03:17:53
发布于 2017-04-03 13:52:38
前言: XAML构建。
您可以通过创建发布/修复分支以及具有特定于这些分支的构建定义来了解所有构建产品。很容易将构建克隆到分支,并使用版本号作为二进制邮票的一部分。我更喜欢使用分支版本号方法,并使用该版本号为我的二进制文件盖章。只要您为每个分支中的二进制文件创建唯一的构建定义,您就可以轻松地查看过去的构建,并确切地看到您需要的与it.All关联的变更集是二进制文件的版本号,并且您可以轻松地将其追溯到源代码。

https://stackoverflow.com/questions/43147361
复制相似问题