版本号为 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。
希望这对您有所帮助。
我的目标是部署 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。
希望这对您有所帮助。