如何在VSTS构建流程中通过dotnet pack为包版本添加构建编号?
在Azure DevOps(原VSTS)中用dotnet pack添加构建编号到.NET Core/.NET Standard包版本
别担心,这个问题其实有好几种简洁的解决办法,完全能实现类似.NET Framework那种自动带构建信息的版本号效果,我给你整理了几个最常用的方案:
方案一:直接在dotnet pack命令中指定完整版本
这是最直接的方式,不用改任何项目文件,利用dotnet pack的参数覆盖版本:
- 首先在Azure DevOps的管道设置里,把构建编号格式调整成符合NuGet规范的样式,比如
1.0.$(BuildId).$(BuildRevision)(这样会生成类似1.0.6604.1234的编号)。 - 在你的dotnet pack任务中,添加命令行参数:
这个参数会直接把项目的版本替换成当前的构建编号,打包出来的nupkg版本就完全符合你的需求了。/p:Version=$(Build.BuildNumber)
方案二:让.csproj自动适配构建环境
如果想让项目在本地构建和Azure DevOps构建时用不同的版本(本地用默认版,构建用编号版),可以修改.csproj文件:
在<PropertyGroup>节点里添加:
<!-- 本地构建时用默认版本 --> <Version Condition=" '$(Build.BuildNumber)' == '' ">1.0.0</Version> <!-- Azure DevOps构建时自动用构建编号 --> <Version Condition=" '$(Build.BuildNumber)' != '' ">$(Build.BuildNumber)</Version>
之后在Azure DevOps的dotnet pack任务里,不需要加额外参数,直接执行dotnet pack就行,系统会自动读取构建变量填充版本号。
方案三:用变量替换任务修改.csproj
如果你不想改动项目文件的结构,可以用Azure DevOps内置的替换文件中的变量任务:
- 先在你的.csproj里把Version设为一个占位符,比如:
<Version>__BUILD_VERSION__</Version> - 在dotnet pack任务之前,添加一个“替换文件中的变量”任务:
- 目标文件路径填你的.csproj路径,比如
**/*.csproj - 替换规则里,把
__BUILD_VERSION__替换成$(Build.BuildNumber)
- 目标文件路径填你的.csproj路径,比如
- 之后再执行dotnet pack,打包出来的版本就是构建编号了。
注意事项
- 确保你的构建编号格式符合NuGet版本规范:不能包含空格、冒号、@等特殊字符,推荐用数字和点分隔的格式。
- 如果想用类似
1.0.*的自动递增逻辑,也可以把构建编号格式设为1.0.$(Date:yyyyMMdd).$(BuildRevision),这样每天的构建版本号会按日期递增。
内容的提问来源于stack exchange,提问作者Quango
相关产品推荐
相关产品推荐

