我的目标是将NuGet程序包(部署到内部的Nuget服务器中)部署为基于日期和上次修订版自动递增版本,并包含-beta标记。
我正在使用VSTS使用Cake构建和打包,其内部版本号格式为 $(BuildDefinitionName)_2.0。$(Date:yyMMdd)$(Rev:.r)。 我有一个.nuspec清单文件,该文件指定: $ version $ ,以及这样的NuGet Packager:
这很好。但是现在,我想选择一个NuGet打包程序,该程序生成一个标记为beta的程序包,因此在VS NuGet程序包管理器中显示为预发布版本。如果我在NuGet Packager中用“ -beta”附加硬编码版本号,则可以执行以下操作:
但是如何包含-beta标记和内部版本号?我想我需要在 NuGet Arguments 中包含一个变量,该变量将返回 $(BuildDefinitionName)_2.0。$(Date:yyMMdd)$(Rev:.r) “ -beta”,但我不确定如何。 我尝试用内部版本号格式创建一个变量(在 Variables 选项卡下),然后在NuGet Arguments(-Version theVariable )中引用该变量,但收到错误,表明该变量不受支持。
我可能正在解决所有这些错误,但是我的搜索并未发现有关如何从日期开始自动增加版本以及包含-beta标记的任何提示。
答案 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自定义看起来像:
内部编号格式:
现在,您可以看到它工作正常:
注意:
您说过您使用VSTS来使用Cake构建和打包,但是您发布的图像表明您正在TFS 2015中使用NuGet Packagertask 。如果您确定使用TFS 2015,恐怕上述解决方法对您不起作用。因为自定义nuget任务不支持TFS 2015。
希望这会有所帮助。