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

时间:2017-09-19 19:17:35

标签: tfs nuget

我们正在评估TFS On Premise,包括包管理功能。

我有几个构建配置,可以成功创建NuGet包并将它们发布到TFS中的feed。

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

有没有办法根据用于构建的分支设置构建配置来修改AssemblyInformationalVersion

因此我们可以在代码中使用[assembly: AssemblyInformationalVersion("1.0.0.0")],但是当构建分支“myNewFeature”时,它会导致“1.0.0.0-myNewFeature”并且构建关闭master会导致“”1.0.0.0“?而不是每次我们合并到不同的分支时,都必须对AssemblyInfo.cs文件进行此更改。

2 个答案:

答案 0 :(得分:1)

要更新AssemblyInfo,您可以使用powershell脚本或使用内部版本号来版本化nuget包。

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

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

对于版本nuget包,您还可以查看下面的博客,其中提供了此处提供的自动包版本控制的概述:

答案 1 :(得分:1)

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

我使用了来自这两个来源GithubGist pietergheysens/Update-AssemblyInfoVersionFiles.ps1的一些代码以及此StackOverflow回答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

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