我们正在评估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文件进行此更改。
答案 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
我的构建步骤如下:
这是基于我用来构建程序包的分支,为我成功更改程序集版本。