Azure DevOps Pipeline中DownloadPackage@1任务下载NuGet包时文件名缺失版本号问题求助
Azure DevOps Pipeline中DownloadPackage@1任务下载NuGet包时文件名缺失版本号问题求助
我完全理解你的困扰——用DownloadPackage@1内置任务下载NuGet包时,文件名自动去掉了版本号,而手动或API下载却能保留包名.版本号.nupkg的完整格式,同时你还希望继续借助任务自带的System.AccessToken能力,不想额外调用API来实现。
这里有两个实用的解决思路,你可以根据自己的场景选择:
方法1:开启任务提取功能间接获取完整文件名
DownloadPackage@1任务其实有个隐藏的小特性:当你开启extract参数时,任务不仅会解压NuGet包的内容到指定目录,还会在解压目录的上级路径保留完整版本号的原包文件。具体配置如下:
- task: DownloadPackage@1 inputs: packageType: 'nuget' feed: 'RandomFeed' definition: 'MyPackage' version: '1.0.0.0' downloadPath: '$(System.ArtifactsDirectory)/temp' extract: true # 开启提取功能
执行后,你会在$(System.ArtifactsDirectory)目录下找到完整的MyPackage.1.0.0.0.nupkg文件,而解压后的包内容则存放在$(System.ArtifactsDirectory)/temp里。之后你可以根据需求把完整包文件移动到目标位置,或者直接使用。
方法2:下载后手动重命名包文件
如果不想开启提取功能,也可以在下载完成后,通过PowerShell或Bash任务手动给包文件补上版本号。这里可以利用DownloadPackage@1任务输出的packageVersion变量来动态拼接文件名,无需硬编码版本号:
PowerShell版本(适用于Windows代理)
- task: DownloadPackage@1 name: downloadNuGet # 给任务命名,方便后续引用输出变量 inputs: packageType: 'nuget' feed: 'RandomFeed' definition: 'MyPackage' version: '1.0.0.0' downloadPath: '$(System.ArtifactsDirectory)' - task: PowerShell@2 inputs: targetType: 'inline' script: | $oldFilePath = "$(System.ArtifactsDirectory)/MyPackage.nupkg" $newFilePath = "$(System.ArtifactsDirectory)/MyPackage.$(downloadNuGet.packageVersion).nupkg" Rename-Item -Path $oldFilePath -NewName $newFilePath
Bash版本(适用于Linux/macOS代理)
- task: DownloadPackage@1 name: downloadNuGet inputs: packageType: 'nuget' feed: 'RandomFeed' definition: 'MyPackage' version: '1.0.0.0' downloadPath: '$(System.ArtifactsDirectory)' - task: Bash@3 inputs: targetType: 'inline' script: | mv $(System.ArtifactsDirectory)/MyPackage.nupkg $(System.ArtifactsDirectory)/MyPackage.$(downloadNuGet.packageVersion).nupkg
这两种方法都完全依赖Pipeline自带的System.AccessToken进行认证,不需要额外配置凭据,完美符合你的需求。
备注:内容来源于stack exchange,提问作者Sentoumaru
相关产品推荐
相关产品推荐

