在 Azure DevOps 中,当 NuGet Restore 任务在与 VS Build 任务相同的 job 中运行时,一切正常:
pool:
vmImage: 'windows-latest'
jobs:
- job:
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: 'Framer/Framer.sln'
- task: VSBuild@1
inputs:
solution: 'Framer/Framer.sln'
platform: 'Any CPU'
configuration: 'Release'
但是当它们处于 2 个不同的 job 中时,VS 构建会失败:
pool:
vmImage: 'windows-latest'
jobs:
- job:
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: 'Framer/Framer.sln'
- job:
steps:
- task: VSBuild@1
inputs:
solution: 'Framer/Framer.sln'
platform: 'Any CPU'
configuration: 'Release'
有错误:
Error NETSDK1004: Assets file 'D:\a\1\s\Framer\FramerCLI\obj\project.assets.json' not found. Run a NuGet package restore to generate this file.
就好像恢复任务没有运行一样。
问题是什么?
每个作业都在自己的“上下文”中运行吗?
但在日志中我看到两个任务的根路径
D:\a\1\s\
完全相同,也许两者之间有一些清理?从您共享的 YAML 中,我们可以看到您正在使用 Microsoft 托管的
windows-latest
代理来运行管道作业。
基于文档“Microsoft 托管代理”的声明:
每次运行管道时,您都会为管道中的每个作业获得一个新的虚拟机。虚拟机在完成一个作业后将被丢弃(这意味着作业对虚拟机文件系统所做的任何更改(例如检出代码)将无法用于下一个作业。
这意味着,每次在 Microsoft 托管的代理上运行管道作业时,每个作业都会获得一个新的虚拟机。每个作业可以在不同的虚拟机上运行。通常,作业完成后,该作业的虚拟机将被丢弃。因此,该作业在虚拟机上所做的所有更改也将被丢弃。