在VSTS生成过程中,将生成号添加到具有`dotnet pack`的软件包版本中

Qua*_*ngo 6 versioning azure-pipelines .net-standard

使用.NET Framework库,您可以使用通配符指定版本,并且在VSTS中运行NUGET生成任务时,NUGET pack命令会自动附加生成日期和版本。

[assembly: AssemblyVersion("1.0.*")]

NUGET PACK将生成一个NUPKG文件,其版本类似于1.0.6604.1234附加日期编号和内部版本ID。

NET标准问题

在.NET Core和.NET标准中,新.csproj格式不支持此通配符格式。

我们无法与Nuget.exe打包(原因:此问题),但我们可以使用,dotnet pack 但我需要自动增加内部版本号。dotnetVSTS中的构建任务允许我完全替换版本号,但是我想将版本保留在csproj文件中,而只需附加一个构建号(就像我以前一样)。

我发现<VersionPrefix>x.y</VersionPrefix>在csproj文件中使用可以使用,nuget pack然后可以将其他参数添加VersionSuffix=$(Build.BuildNumber)到pack任务中。

在第一个开发人员在项目属性对话框中更新了项目版本之前,一切看起来都很不错。Visual Studio将忽略VersionPrefix并设置<Version>标签-并且由于Version存在标签而将忽略内部版本号修复。

有没有办法Version从csproj 读取?如果是这样,我可以将build属性设置为Version=$(ProjectVersion).$(Build.BuildNumber)

还是在打包时有其他方法可以自动递增生成版本?

Pat*_*SFT 5

首先,您可以选择Use an environment variable自动软件包版本控制”,将定义的变量(例如temp$(build.buildNumber)))用作环境变量

在此处输入图片说明 在此处输入图片说明

更多详细信息请查看此链接:Dotnet软件包自动软件包版本化内部版本号说明

另一种方法是使用dotnet CLI任务中的“参数”字段,您可以将其他参数传递给dotnet cli。

使用--version-suffix $(Build.BuildNumber)将通过内部版本号作为版本后缀。确保您<version> 的csproj中没有设置元素,而是设置了<versionprefix>元素。生成的版本看起来像versionprefix-versionsuffix,因此,例如,如果您有<versionprefix>1.2.3</versionprefix>and build number 201805002,则生成的版本将为1.2.3-201805002。在这种情况下,请不要选择自动软件包版本控制。


Qua*_*ngo 5

感谢@patricklu-msft 的建议。

似乎没有内置的方法来模拟我们以前NUGET pack使用的通配符行为dotnet pack,也没有办法<Version>从项目文件中获取标记。

所以,我创建了一个新的VSTS构建的任务,做到这一点:VersionTaskReader在市场上。

此扩展可以指向一个.csproj.vbproj,并且将设置的环境变量VERSION,并且VERSION_BUILD其具有BUILDID所附。如果需要,您可以选择添加前缀以使每个实例不同。

例如,如果您的项目包含<Version>1.1</Version>VERSION_BUILD类似于1.1.8680

然后dotnet pack任务可以使用VERSION_BUILD版本控制选项屏幕中的环境变量,以便内部版本号自动递增。