我只发布这是由我的TFS生成定义一个生成的二进制文件和每个版本接收一个唯一的版本号(1.0。$ YY $ DAYOFYEAR。$ REV)。构建名称的名称包含此版本号。版本号由PowerShell脚本设置为程序集版本和二进制文件版本。我只有一个构建结果rentention(包括我投递文件夹中生成的二进制文件)为60天,现在我想知道:我将如何可能找出一些版本号是一岁,其变更集它是从让建我可以看看源代码或重建完整的二进制文件?我是否必须在构建期间以某种方式添加变更集信息?我必须在构建期间设置的版本号中对变更集编号进行编码吗?这两个想法似乎都不是很巧妙。如何找出TFS 2015构建的变更集是从?
1
A
回答
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的属性中可见。
此外,我已经定义了自定义属性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和版本的信息。
1
+0
我更喜欢直接在二进制或在TFS的信息“版本变更”的一些存储。发行说明很容易丢失,因为有人只将二进制文件复制到其他地方。然而,它是记录相关工作项和提交的有趣机制。将尝试记住你的建议。 – David
1
相关问题
- 1. TFS 2015继续构建只输出更改程序集
- 2. 如何从TFS 2017中构建相关的变更集?
- 3. 如何链接TFS 2015中的构建?
- 4. TFS 2015构建变量扩展
- 5. TFS 2015如何获得两个以上的变更集显示
- 6. TFS 2015构建定义 - 覆盖包含变量的构建号
- 7. SpecFlow构建TFS 2015年
- 8. TFS 2015构建配置
- 9. TFS 2015构建问题
- 10. 如何找出TFS变更集已合并到哪个分支
- 11. TFS构建变量当前冲刺TFS 2015
- 12. TFS构建2015 - 使用Visual Studio 2015构建过程
- 13. TFS构建特定的变更集并使用变更集号进行部署
- 14. 将TFS 2013 xaml构建定义转换为TFS 2015 vNext构建
- 15. 从另一个构建(条件)在TFS触发构建2015年
- 16. 在内部创建CI构建TFS 2015
- 17. TFS 2015构建定义来查找另一个构建的构件位置
- 18. 构建定义的TFS 2015“增量”
- 19. 我如何从TFS 2015构建(匹配我的XAML构建)获得预期输出?
- 20. 如何从另一个TFS构建中调用TFS构建?
- 21. 如何找到两个TFS分支之间的变更集?
- 22. TFS 2013更新4到TFS 2015更新3集合错误
- 23. 如何将Cake build的输出集成到TFS 2013构建中?
- 24. TFS 2015构建任务 - 手动干预
- 25. TFS 2015构建任务 - NuGet Packager
- 26. 如何查询通过GUI在TFS上构建的特定变更集?
- 27. TFS 2015:更新成功构建的关联项目
- 28. 寻找TFS 2015更新2 RC2
- 29. TFS 2015更新2 - 重复项目收集构建服务帐户
- 30. 如何防止在新的TFS构建过程中重复构建vNext 2015
当你自己修复它时总会更好,因为解决方案最适合你的场景!:) –