如何从 VSTS 中的一个 nuspec 生成发布包和预发布包?

How to to produce both release and pre-release packages from one nuspec in VSTS?

目前我的构建每次都会生成两个具有更新版本的包:

Release: Automatic package versioning = Use the build number
Pre-release: Additional build properties = Version=$(user.BuildFullVersion)-beta

而且只有一个 nuspec 有版本占位符:

<version>$version$</version>

我想手动增加版本,重复构建会产生相同的版本,直到我手动增加它。

如何实现仍然只有一个 nuspec?

我可以像这样在打包任务中调整包版本吗:

Release: $(PackageVersion) = $(PackageVersion)
Pre-release: $(PackageVersion) = $(PackageVersion)-beta

或类似的东西。

要通过 nuspec 生成两个包,您可以使用两个 NuGet 任务(NuGet 自定义而不是 NuGet 包):

NuGet 任务:

命令:自定义

命令和参数:

pack $(Build.SourcesDirectory)\Package.nuspec -Version $(Build.BuildNumber) -OutputDirectory $(build.artifactstagingdirectory)

NuGet 任务:

命令:自定义

命令和参数:

pack $(Build.SourcesDirectory)\Package.nuspec -Version $(Build.BuildNumber) -Suffix beta -OutputDirectory $(build.artifactstagingdirectory)

如果您将 $(Build.BuildNumber) 设置为类似 MyProject-Daily_1.0.94.0 的格式,同时您希望将 nuget 包的版本添加为 1.0.94.0,您可以在构建定义中定义一个变量,并且通过切割 $(Build.BuildNumber) 的子字符串来设置值。详细步骤如下:

变量选项卡中,添加一个具有任意值(例如temp)的变量(例如version)。

在具有设置的 NuGet 任务之前添加一个 PowerShell 任务

类型:内联脚本

内联脚本:

$s1=$(Build.BuildNumber).split('_')[1].split(' ')
Write-Host "##vso[task.setvariable variable=version]$s1"

然后在 NuGet 自定义任务中使用 $(version)$(Build.BuildNumber) 替换为 -version 选项。比如nuget pack -version $(version).