在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包,你也可以看看下面的博客提供可用的自动包的版本在这里的概述:
我已经成功拼凑出一个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
我构建步骤如下所示:
这是成功地改变我的程序集版本,基于我用来构建包的分支。
谢谢你的宝贵链接。我设法拼凑了一个Powershell脚本,用于更改AssemblyInfo.cs文件中的AssemblyInformationalVersion – Darren