如何在TeamCity中获取新生成的NuGet包版本?
嘿,我来给你几个在TeamCity里获取新生成NuGet包版本的实用方案,都是咱们日常构建中常用的:
方案1:绑定TeamCity构建号作为NuGet版本
这是最省心的方式,直接把TeamCity的构建号和NuGet包版本绑定起来:
- 在你的
dotnet pack构建步骤里,修改命令行参数,加上版本号参数:dotnet pack YourProject.csproj -c Release -o %env.TEAMCITY_PACKAGES_OUTPUT%\%system.teamcity.projectName% /p:PackageVersion=%build.number% - 这样新生成的包名就是
%system.teamcity.projectName%.%build.number%.nupkg,发布步骤里直接用这个路径就行:%env.TEAMCITY_PACKAGES_OUTPUT%\%system.teamcity.projectName%\%system.teamcity.projectName%.%build.number%.nupkg - 注意:提前在TeamCity项目设置里把构建号格式配置成符合NuGet规范的语义化版本(比如
1.0.%build.counter%或者自定义的版本格式)。
方案2:从项目文件提取版本号并设置为环境变量
如果你的版本号是定义在csproj文件的<Version>节点里的,可以用脚本提取出来,传给发布步骤:
- 在
dotnet pack步骤之后,添加一个PowerShell构建步骤,脚本内容如下:# 替换成你的项目文件实际路径,比如$(Build.SourcesDirectory)/YourProject/YourProject.csproj $projectPath = "%system.teamcity.build.workingDir%\YourProject.csproj" $versionNode = Select-Xml -Path $projectPath -XPath "/Project/PropertyGroup/Version" $packageVersion = $versionNode.Node.InnerText # 将版本号设置为TeamCity环境变量,供后续步骤调用 Write-Host "##teamcity[setParameter name='env.NUGET_PACKAGE_VERSION' value='$packageVersion']" - 然后在NuGet发布步骤的Packages配置项里,就可以用这个环境变量来定位包:
%env.TEAMCITY_PACKAGES_OUTPUT%\%system.teamcity.projectName%\%system.teamcity.projectName%.%env.NUGET_PACKAGE_VERSION%.nupkg
方案3:用通配符+目录隔离定位最新包
如果不想处理版本号,也可以通过目录隔离来确保只有新生成的包在目标目录:
- 在
dotnet pack步骤里,指定输出到一个临时目录(每次构建都会清空的那种),比如:dotnet pack -c Release -o %env.TEAMCITY_PACKAGES_OUTPUT%\%system.teamcity.projectName%\Temp - 然后发布步骤直接用通配符匹配这个目录下的所有nupkg文件:
%env.TEAMCITY_PACKAGES_OUTPUT%\%system.teamcity.projectName%\Temp\*.nupkg - 或者如果你的输出目录里只有新生成的包(比如构建前会清理旧包),直接用
%env.TEAMCITY_PACKAGES_OUTPUT%\%system.teamcity.projectName%\*.nupkg也可以,但要注意避免旧包干扰。
内容的提问来源于stack exchange,提问作者pantonis
相关产品推荐
相关产品推荐

