Azure Pipelines:如何获取私有源已发布或刚构建NuGet包的版本
提取NuGet包版本号并在流水线中复用的方法
方法一:从本地构建的nupkg文件提取版本号
nupkg本质是压缩包,自带元数据,直接从本地文件提取是最可靠的方式,避免依赖私有源的网络状态。
用dotnet命令快速提取
利用dotnet nuget verify的输出解析版本号,无需解压文件:# 替换为你的nupkg文件路径 $nupkgPath = "./bin/Release/YourPackage.nupkg" # 提取版本号 $version = dotnet nuget verify $nupkgPath --verbosity detailed | Select-String 'Version: (\d+\.\d+\.\d+.*)' | % { $_.Matches.Groups[1].Value } # 将版本号设为流水线变量(以Azure DevOps为例) echo "##vso[task.setvariable variable=NuGetPackageVersion]$version"解压读取nuspec文件
如果需要更灵活的元数据读取,可以解压nupkg后读取内部的.nuspecXML文件:$nupkgPath = "./bin/Release/YourPackage.nupkg" $tempDir = New-Item -ItemType Directory -Path "./temp_nupkg" # 解压nupkg Expand-Archive -Path $nupkgPath -DestinationPath $tempDir.FullName # 找到nuspec文件 $nuspecFile = Get-ChildItem $tempDir.FullName -Filter "*.nuspec" | Select-Object -First 1 # 从XML中提取版本号 $version = Select-Xml -Path $nuspecFile.FullName -XPath "/package/metadata/version" | % { $_.Node.InnerText } # 设置流水线变量 echo "##vso[task.setvariable variable=NuGetPackageVersion]$version" # 清理临时文件 Remove-Item $tempDir.FullName -Recurse -Force
方法二:从私有NuGet源获取已发布包的版本号
如果已经完成发布,也可以直接查询私有源获取最新版本(适合需要确认发布结果的场景):
# 替换为你的包ID和私有源地址 $packageId = "Your.Package.Id" $privateSource = "https://your-private-nuget-source/v3/index.json" # 获取最新版本(包含预发布版) $latestVersion = dotnet nuget list $packageId --source $privateSource --include-prerelease | Select-String "$packageId (\d+\.\d+\.\d+.*)" | % { $_.Matches.Groups[1].Value } # 设置流水线变量 echo "##vso[task.setvariable variable=NuGetPackageVersion]$latestVersion"
不同CI系统的变量设置差异
- GitHub Actions:用
echo "NuGetPackageVersion=$version" >> $GITHUB_ENV替代Azure DevOps的变量设置命令 - GitLab CI:用
echo "NuGetPackageVersion=$version" >> $CI_ENVIRONMENT或设置为CI/CD变量
内容的提问来源于stack exchange,提问作者Cristi
相关产品推荐
相关产品推荐

