在TFS中构建NuGet包期间更新AssemblyInfo

问题描述:

我们正在评估TFS On Premise,包括包管理功能。在TFS中构建NuGet包期间更新AssemblyInfo

我有几个构建配置成功创建NuGet包并将它们发布到TFS内的提要。

该软件包的版本通过解决方案中的AssemblyInfo.cs文件进行控制。例如:[assembly: AssemblyInformationalVersion("1.0.0.0")]导致NuGet版本1.0.0.0;使用AssemblyInformationalVersion,因为你可以申请预发布标签的版本,如[assembly: AssemblyInformationalVersion("1.0.0.0-dev")]导致verison 1.0.0.0-dev的

有没有被用于建立构建配置来修改基于分支的AssemblyInformationalVersion的方式构建?

因此我们可以在代码中使用[assembly: AssemblyInformationalVersion("1.0.0.0")],但是当构建分支“myNewFeature”时导致“1.0.0.0-myNewFeature”并且构建主控可能导致“”1.0.0.0“?而不是必须使这种变化在AssemblyInfo.cs中每次我们合并到一个不同的分支时文件。

要更新集信息您可以使用PowerShell脚本或使用版本号到版本的NuGet包。

对于构建定义,$(SourceBranchName)可用于内部编号格式。可用变量列表可在此处找到 - Predefined variables

因此,当您在构建结束时生成Nuget包时,可以使用正在构建的分支版本对它们进行版本控制。欲了解更多详情,请参阅此相关的问题:Use Branch Name in TFS 2015 Automated Build

而对于版本的NuGet包,你也可以看看下面的博客提供可用的自动包的版本在这里的概述:

+0

谢谢你的宝贵链接。我设法拼凑了一个Powershell脚本,用于更改AssemblyInfo.cs文件中的AssemblyInformationalVersion – Darren

我已经成功拼凑出一个Powershell脚本,该脚本作为构建配置中的第一个构建步骤运行。

我使用了一些代码,这些源2和GithubGist pietergheysens/Update-AssemblyInfoVersionFiles.ps1这也计算器回答Get and Replace AssemblyVersion from AssemblyInfo.cs

我个人不知道Powershell的语法和下面的脚本未必是最适合的。任何建议将被认真考虑。

PowerShell脚本是:

帕拉姆 ( [参数(强制性= $真实) [字符串] $ BRANCHNAME, [字符串] $ projectDirectory )

$SrcPath = $env:BUILD_SOURCESDIRECTORY 
if ($projectDirectory -ne ""){ 
    $SrcPath = "$SrcPath$projectDirectory" 
}  

Write-Verbose "Executing Update-AssemblyInfoVersionFiles in path $SrcPath for product versionon branch $branchName" -Verbose 

if ($branchName.ToLower() -eq "master") 
{ 
    $branchName = "" 
} 
else 
{ 
    $branchName = "-$branchName" 
} 

$AllVersionFiles = Get-ChildItem $SrcPath AssemblyInfo.cs -recurse 
$pattern = '\[assembly: AssemblyInformationalVersion\("(.*)"\)\]' 
foreach ($file in $AllVersionFiles) 
{ 
    #version replacements 
    (Get-Content $file.FullName) | ForEach-Object{ 
     if($_ -match $pattern){ 
      # We have found the matching line 
      # Edit the version number and put back. 
      $currentVersion = [version]$matches[1] 
      Write-Verbose " $currentVersion" -Verbose 
      $newVersion = "$currentVersion$branchName" 
      '[assembly: AssemblyInformationalVersion("{0}")]' -f $newVersion 
      Write-Verbose "New AssemblyInformationalVersion is $newVersion" -Verbose 
     } else { 
      # Output line as is 
      $_ 
     } 
    } | Set-Content $file.FullName -Force 
} 
Write-Verbose "Transformed Assembly Informational Version is $assemblyInformationalVersion" -Verbose 

我构建步骤如下所示:

enter image description here

这是成功地改变我的程序集版本,基于我用来构建包的分支。