You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps中Cache@2任务缓存NuGet包失败求助

解决Azure DevOps Cache@2缓存NuGet包路径错误问题

你的问题核心是缓存路径与NuGet实际包存储路径不匹配:

  1. 问题原因

    • 你配置的$(Pipeline.Workspace)/.nuget/packages是作业工作区路径,但在Ubuntu代理上,NuGet默认会将包安装到用户主目录下的.nuget/packages(即/home/vsts/.nuget/packages),而非作业工作区。
    • $(Agent.HomeDirectory)指向的是代理安装目录(如/home/vsts/agent),并非用户主目录,所以用它也无法定位到正确的包路径。
  2. 优雅的解决方案
    不要硬编码路径,改用Azure DevOps预定义变量或NuGet官方环境变量来定位包目录:

    方案一:使用跨平台的$(HOME)变量
    $(HOME)在Linux/macOS代理上指向用户主目录,Windows代理上指向C:\Users\VssAdministrator,对应NuGet包目录为$(HOME)/.nuget/packages(Linux/macOS)或$(HOME)\.nuget\packages(Windows),跨平台通用:

    variables:
      nugetPackages: $(HOME)/.nuget/packages
    

    方案二:使用NuGet官方环境变量$(NUGET_PACKAGES)
    这个变量由NuGet自动设置,直接指向当前环境下的包存储目录,无需区分操作系统,是最可靠的方式:

    variables:
      nugetPackages: $(NUGET_PACKAGES)
    
  3. 修正后的完整YAML示例

    variables:
      nugetPackages: $(NUGET_PACKAGES)
      
    stages:
      - stage: CI
        displayName: 'Continuous Integration'
        jobs:
          - job: 'CI'
            pool:
              vmImage: ubuntu-latest
            steps:
              - task: NuGetToolInstaller@1
                displayName: 'NuGet tool installer'
    
              - task: Cache@2
                inputs:
                  key: 'nuget | "$(Agent.OS)" | **/packages.lock.json,!**/bin/**,!**/obj/**'
                  restoreKeys: |
                    nuget | "$(Agent.OS)"
                    nuget
                  path: $(nugetPackages)
                displayName: Cache NuGet packages
    
              - task: DotNetCoreCLI@2
                displayName: 'Restore Packages'
                inputs:
                  command: 'restore'
                  feedsToUse: 'select'
                  vstsFeed: '<DevOpsArtifactFeedId>'
                  projects: 'Solution.sln'
    
  4. 额外说明
    如果需要强制NuGet将包安装到作业工作区(比如$(Pipeline.Workspace)/.nuget/packages),可以在DotNetCoreCLI@2的restore步骤中添加arguments: '--packages $(nugetPackages)',这样缓存路径和安装路径就能匹配,但这种方式会改变NuGet默认的包存储位置,一般不推荐。

内容的提问来源于stack exchange,提问作者David Masters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 18:12:52