0

当我设置 TFS 2015 构建定义(即创建 NuGet 包)时,我将内部版本号格式设置为:

$(BuildDefinitionName)_$(Major).$(Minor)$(rev:.r)

主要和次要或只是我定义的变量。当我使用步骤“NuGet Packager”时,出现错误:

在 BUILD_BUILDNUMBER 中找不到版本号数据。

当我使用 4 位数字时,我没有收到错误消息。如何让它与语义版本控制一起工作?

4

2 回答 2

1

我找到了解决方案:

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

于 2016-08-31T16:22:28.297 回答
0

如果您查看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 个数字版本。

于 2016-08-31T15:41:44.750 回答