当我设置 TFS 2015 构建定义(即创建 NuGet 包)时,我将内部版本号格式设置为:
$(BuildDefinitionName)_$(Major).$(Minor)$(rev:.r)
主要和次要或只是我定义的变量。当我使用步骤“NuGet Packager”时,出现错误:
在 BUILD_BUILDNUMBER 中找不到版本号数据。
当我使用 4 位数字时,我没有收到错误消息。如何让它与语义版本控制一起工作?
当我设置 TFS 2015 构建定义(即创建 NuGet 包)时,我将内部版本号格式设置为:
$(BuildDefinitionName)_$(Major).$(Minor)$(rev:.r)
主要和次要或只是我定义的变量。当我使用步骤“NuGet Packager”时,出现错误:
在 BUILD_BUILDNUMBER 中找不到版本号数据。
当我使用 4 位数字时,我没有收到错误消息。如何让它与语义版本控制一起工作?
我找到了解决方案:
1)您需要访问您的构建代理机器
2) 导航到 Build Agent 的安装位置。对我来说 --> C:\BuildAgent\tasks\NuGetPackager
3)你会看到文件夹版本,所以进入最新的。
4)修改PowerShell脚本,NuGetPackager.ps1
查找 --> $VersionRegex = "\d+.\d+.\d+.\d+"
并替换为 --> $VersionRegex = "\d+.\d+.\d+.\d+|\d+.\d+.\d+"
5)然后保存脚本。
我正在做的是将正则表达式修改为“在内部版本号字符串中搜索模式#.#.#.# OR #.#.#”。而之前它只是在寻找“#.#.#.#”。
现在,当您进行构建时,TFS 构建代理将能够解析构建版本:
将 workingFolder 设置为默认值:C:\BuildAgent\tasks\NuGetPackager\0.1.58
执行powershell脚本:C:\BuildAgent\tasks\NuGetPackager\0.1.58\NuGetPackager.ps1
从构建中获取版本号
BUILD_BUILDNUMBER:Planning.Domain.Library-CI_1.0.7
版本:1.0.7
如果您查看https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/NugetPackager/NuGetPackager.ps1:
if ($b_versionByBuild)
{
Write-Verbose "Autoversion: Getting version number from build"
##Get Version from Build
# Regular expression pattern to find the version in the build number
# and then apply it to the assemblies
$VersionRegex = "\d+\.\d+\.\d+(?:\.\d+)?"
对 3 部分内部版本号的支持来自此提交: https ://github.com/Microsoft/vsts-tasks/commit/233c112bc06b91964a559090b8acfd4452cdec0b
在此提交之前,正则表达式只是\d+\.\d+\.\d+\.\d+
. 所以也许你的 TFS 中有一个过时的任务代码。
我刚刚检查了我的本地 TFS 2015。它无法解析 3 个数字版本。