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

Azure Cache@2任务报错:未找到匹配packages.lock.json相关文件

问题描述

我参照Azure DevOps的NuGet缓存示例配置了Cache@2任务,YAML代码如下:

variables:
  NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages

- task: Cache@2
  displayName: Cache
  inputs:
    key: 'nuget | "$(Agent.OS)" | **/packages.lock.json,!**/bin/**,!**/obj/**'
    restoreKeys: |
       nuget | "$(Agent.OS)"
       nuget
    path: '$(NUGET_PACKAGES)'
    cacheHitVar: 'CACHE_RESTORED'

执行任务时出现错误,错误日志如下:

2023-10-30T18:10:38.7068066Z ##[section]Starting: NuGet Cache
2023-10-30T18:10:38.7210499Z ==============================================================================
2023-10-30T18:10:38.7210902Z Task         : Cache
2023-10-30T18:10:38.7211034Z Description  : Cache files between runs
2023-10-30T18:10:38.7211269Z Version      : 2.198.0
2023-10-30T18:10:38.7211412Z Author       : Microsoft Corporation
2023-10-30T18:10:38.7211625Z Help         : https://aka.ms/pipeline-caching-docs
2023-10-30T18:10:38.7211912Z ==============================================================================
2023-10-30T18:10:39.1559570Z Resolving key:
2023-10-30T18:10:39.1771434Z  - nuget                                       [string]
2023-10-30T18:10:39.1776896Z  - "Windows_NT"                                [string]
2023-10-30T18:10:39.2982850Z  - **/packages.lock.json,!**/bin/**,!**/obj/** [file pattern; matches: 0]
2023-10-30T18:10:39.3161650Z ##[error]One or several exceptions have been occurred.
2023-10-30T18:10:39.3182795Z ##[error]System.IO.FileNotFoundException: No matching files found for pattern: **/packages.lock.json,!**/bin/**,!**/obj/**
2023-10-30T18:10:39.3214721Z ##[section]Finishing: NuGet Cache
原因分析

错误日志明确显示找不到匹配指定模式的文件,核心原因有两点:

  1. 项目未生成packages.lock.json文件:该文件是NuGet锁定依赖的专用文件,仅在启用NuGet锁定模式时才会生成,默认情况下多数项目不会自动创建。
  2. 路径匹配异常:即使存在packages.lock.json,若流水线执行Cache任务时的工作目录不正确,或文件不在仓库预期路径下,也会导致匹配失败。
解决方法

方法一:生成并提交packages.lock.json到仓库

若要基于packages.lock.json实现缓存,需先在项目中启用NuGet锁定模式:

  1. 本地项目操作:
    • 终端执行(适用于.NET项目):
      dotnet restore --use-lock-file
      
    • 或在Visual Studio中:右键项目 → 「管理NuGet程序包」→ 右上角设置图标 → 「NuGet包管理器」设置中勾选「启用锁定文件」,重新还原依赖后生成packages.lock.json。
  2. 将生成的packages.lock.json提交到Git仓库,确保流水线拉取代码时能获取到该文件。

方法二:改用其他缓存键(不依赖packages.lock.json)

若无需使用锁定文件,可改用项目的.csproj或NuGet.config作为缓存键的匹配项,示例修改后的YAML:

variables:
  NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages

- task: Cache@2
  displayName: Cache NuGet packages
  inputs:
    key: 'nuget | "$(Agent.OS)" | **/*.csproj,!**/bin/**,!**/obj/**'
    restoreKeys: |
       nuget | "$(Agent.OS)"
       nuget
    path: '$(NUGET_PACKAGES)'
    cacheHitVar: 'CACHE_RESTORED'

可根据项目实际情况替换为**/NuGet.config等其他合适的文件匹配模式。

额外检查点

  • 确保流水线在执行Cache任务前已完成代码拉取(如Checkout任务),否则本地无项目文件必然匹配失败。
  • 验证packages.lock.json的路径是否符合**/packages.lock.json的匹配规则,确认排除规则!**/bin/**,!**/obj/**是否正确排除了无关路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:53:18