版本号为 NuGet Packager,添加 -beta

NuGet Packager with version using build number, adding -beta

我的目标是部署 NuGet 包(到内部 Nuget 服务器),根据日期和上次 Rev 自动增加版本,并包含 -beta 标记。

我正在使用 VSTS 使用 cake 构建和打包,内部版本号格式为 $(BuildDefinitionName)_2.0.$(Date:yyMMdd)$(Rev:.r)。 我有一个 .nuspec 清单文件指定:$version$,以及一个 NuGet Packager:

效果很好。但是现在,我想要一个 NuGet 打包器的选项,它生成一个标记为 beta 的包,因此在 VS NuGet 包管理器中显示为预发布。如果我在 NuGet Packager 中使用附加的“-beta”对版本号进行硬编码,我可以这样做:

但是我怎样才能包含 -beta 标签和内部版本号呢?我想我需要在 NuGet Arguments 中包含一个变量,它将 return $(BuildDefinitionName)_2.0.$(Date:yyMMdd)$(Rev :.r) 加上“-beta”,但我不确定如何。 我尝试创建一个变量(在 Variables 选项卡下),并将内部版本号格式作为值,然后在 NuGet Arguments (-Version theVariable), 但收到不支持该变量的错误。

我可能做错了,但是我的搜索没有找到任何关于如何从日期自动增加版本的提示,并包括一个 -beta 标签。

NuGet Packager with version using build number, adding -beta

我可以在我这边重现你的场景。在我看来,带有内部版本号的 Nuget pack 任务不支持字符或数字。您可以查看 this task:

case "byBuildNumber":
                tl.debug("Getting version number from build number")

                if(tl.getVariable("SYSTEM_HOSTTYPE") === "release")
                {
                    tl.setResult(tl.TaskResult.Failed, tl.loc("Error_AutomaticallyVersionReleases"));
                    return;
                }

                let buildNumber: string =  tl.getVariable("BUILD_BUILDNUMBER");
                tl.debug(`Build number: ${buildNumber}`);

                let versionRegex = /\d+\.\d+\.\d+(?:\.\d+)?/;
                let versionMatches = buildNumber.match(versionRegex);
                if (!versionMatches)
                {
                    tl.setResult(tl.TaskResult.Failed, tl.loc("Error_NoVersionFoundInBuildNumber"));
                    return;
                }

                if (versionMatches.length > 1)
                {
                    tl.warning(tl.loc("Warning_MoreThanOneVersionInBuildNumber"))
                }

                version = versionMatches[0];
                break;

这就是为什么当我们在构建号中使用字段 $(BuildDefinitionName)beta 时它们不能出现在我们的包版本中的原因。

如果我们在 nuget 参数中指定了 nuget 版本,但是这个参数无法解析预定义的变量,比如 $(Rev:.r)

这两种情况的局限性导致了您目前的问题。

解决此问题的解决方法是使用带参数 -version $(Build.BuildNumber) 的 nuget 自定义任务,并将字段 $(BuildDefinitionName) 从我们的内部版本号格式中移走,否则,我们仍然收到版本无效的错误。

所以,你的 nuget 自定义看起来像:

和内部版本号格式:

现在,您可以看到它工作正常:

注:

你说你使用 VSTS 构建和打包使用 cake,但你发布的图像显示你正在使用 NuGet Packagertask in TFS 2015.如果您确定使用 TFS 2015,恐怕上述解决方法对您不起作用。因为自定义 nuget 任务不支持 TFS 2015。

希望这对您有所帮助。