NuGet Packager,其版本使用内部版本号,并添加-beta

时间:2019-08-08 21:45:32

标签: azure-devops nuget nuget-server

我的目标是将NuGet程序包(部署到内部的Nuget服务器中)部署为基于日期和上次修订版自动递增版本,并包含-beta标记。

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

Th

这很好。但是现在,我想选择一个NuGet打包程序,该程序生成一个标记为beta的程序包,因此在VS NuGet程序包管理器中显示为预发布版本。如果我在NuGet Packager中用“ -beta”附加硬编码版本号,则可以执行以下操作: enter image description here

但是如何包含-beta标记和内部版本号?我想我需要在 NuGet Arguments 中包含一个变量,该变量将返回 $(BuildDefinitionName)_2.0。$(Date:yyMMdd)$(Rev:.r) “ -beta”,但我不确定如何。 我尝试用内部版本号格式创建一个变量(在 Variables 选项卡下),然后在NuGet Arguments(-Version theVariable )中引用该变量,但收到错误,表明该变量不受支持。

我可能正在解决所有这些错误,但是我的搜索并未发现有关如何从日期开始自动增加版本以及包含-beta标记的任何提示。

1 个答案:

答案 0 :(得分:0)

  

NuGet Packager,其版本号使用内部版本号,并添加-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自定义看起来像:

enter image description here

内部编号格式:

enter image description here

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

enter image description here

注意:

您说过您使用VSTS来使用Cake构建和打包,但是您发布的图像表明您正在TFS 2015中使用NuGet Packagertask 。如果您确定使用TFS 2015,恐怕上述解决方法对您不起作用。因为自定义nuget任务不支持TFS 2015。

希望这会有所帮助。

相关问题