我正在使用“TFS 2018 Update 2”并尝试根据microsoft semantic
构建标记为预发布的包我尝试使用 .nuspec文件插入(例如:1.0.0-beta并将内部版本号格式更改为:$(BuildDefinitionName)_ $(年份) :YYYY)$(月)$(DAYOFMONTH)$(版本号:。.R)$(后缀) 在队列时设置$(后缀)变量。
每次尝试都失败了:包从不包含后缀,而是从未标记为预发布。 我看到nuget pack命令从不包含后缀(在“2018.6.12.9”之后缺少“-beta”)。在我的测试版中, $后缀设置为“-beta”:
nuget.exe包 C:\ agent_work \ 4 \ S \ DotNetClassicLibrary \ DotNetClassicLibrary.csproj -NonInteractive -OutputDirectory C:\ agent_work \ 4 \ a -Properties Configuration = debug -version 2018.6.12.9 -Verbosity Detailed
TFS上的构建任务是:
“DotNetClassicLibrary / Build DotNetClassicLibrary_2018.6.12.9-beta / Job / NuGet包“
所以我确定该变量已分配,因为路径中存在后缀“ - beta”。
这里有nuget pack任务的配置
这是内部版本号格式
答案 0 :(得分:1)
我可以在我身边重现你的情景。在我看来,带有内部版本号的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;
作为替代方案,您可以选择
Nuget custom
,并指定 使用参数-version $(Build.BuildNumber)
打包命令, 我试过了,这很有效。