【问题标题】:TFS 2015 build vNext update file version with commit idTFS 2015 构建具有提交 ID 的 vNext 更新文件版本
【发布时间】:2017-06-05 11:40:02
【问题描述】:

你知道如何将提交 ID 注入文件版本,所以每个程序集都会有类似 2.0.6565.0 的版本,其中 6565 与 TFS 中的 C6565commit ID 相关?

看起来需要一些强大的 shell 脚本。

【问题讨论】:

  • 这个问题和stackoverflow.com/questions/41763224/…类似吗?
  • @Cece - MSFT,这个关于使用提交/变更集 id 更新 dll 的问题。为什么你投了反对票?你能解释一下,有什么问题吗?

标签: tfs azure-devops tfsbuild tfs-2015


【解决方案1】:

如果您的问题与您的另一篇帖子 TFS 2015. the $(var.SourceLocation) variable is not available at gated-check in 类似,即想要获取在门控签入期间尚未签入的变更集 ID,那么在单个构建中是不可能的。

如果您不使用门控签入,则可以在 powershell 脚本中使用 $Env:BUILD_SOURCEVERSION 来设置 AssemblyVersion。下面这个网站已经有脚本了,大家可以参考一下:

https://github.com/wulfland/ScriptRepository/blob/master/TFSBuild/TFSBuild/AssemblyVersion/Set-AssemblyVersion/Set-AssemblyVersion.ps1

【讨论】:

  • 再次,这是不同的问题。您帖子的第二部分看起来很有趣。
【解决方案2】:

最后我基于this post创建了自己的PS脚本。 包含程序集信息的所有文件中的想法更新版本

$CommitId = ([string]$env:BUILD_SOURCEVERSION) -replace "[^0-9]+", ""
$AllVersionFiles = Get-ChildItem $SourceDir AssemblyInfo.cs -recurse
$regexToFindVersion = "Version\(""([0-9]+)\.([0-9]+).+"""

foreach ($file in $AllVersionFiles) 
{
    Write-Host "Processing " $file.FullName

    (Get-Content $file.FullName) |
    %{$_ -replace $regexToFindVersion, ('Version("$1.$2.0.' + $CommitId + '"') } |
    Set-Content $file.FullName -Force
}

完整的脚本可以在here找到。

脚本必须在构建项目之前放置:

【讨论】:

  • 是否可以修改此脚本以仅更改产品版本而不是文件和产品版本?
  • “产品版本”是什么意思?该脚本可以更新程序集的程序集版本和文件版本。它达到了“AssemblyVersion”和“AssemblyFileVersion”属性。您可以通过更改正则表达式将逻辑更改为您想要的任何内容。如果您只需要文件版本,请使用类似 "FileVersion(""([0-9]+)\.([0-9]+).+"""
猜你喜欢
  • 2018-05-12
  • 2016-09-02
  • 2016-07-30
  • 2016-08-27
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多