Msbuild 在尝试访问本地缓存的nuget包时,如何防止生成失败,该包正被同一生成中的另一个项目锁定?

Msbuild 在尝试访问本地缓存的nuget包时,如何防止生成失败,该包正被同一生成中的另一个项目锁定?,msbuild,teamcity,nuget,teamcity-7.0,Msbuild,Teamcity,Nuget,Teamcity 7.0,我们已经在公司内部建立了解决方案CI 构建总共花费了大约13分钟,这似乎有点太长了。在深入研究之后,我发现我们没有将/maxcpucount开关传递给msbuild命令,因此每个项目都是按顺序构建的,而不是并行构建的。添加此开关将构建时间减少到3分钟 然而,我们开始看到构建间歇性失败,消息是缓存的nuget包已被另一个进程使用。无法构建的项目,并且锁定的nuget包每次都会更改 这是因为我们同时在同一个解决方案中构建了多个项目,我们可以得到这样的情况,即并行构建的两个项目试图同时访问相同的本地缓

我们已经在公司内部建立了解决方案CI

构建总共花费了大约13分钟,这似乎有点太长了。在深入研究之后,我发现我们没有将
/maxcpucount
开关传递给
msbuild
命令,因此每个项目都是按顺序构建的,而不是并行构建的。添加此开关将构建时间减少到3分钟

然而,我们开始看到构建间歇性失败,消息是缓存的nuget包已被另一个进程使用。无法构建的项目,并且锁定的nuget包每次都会更改

这是因为我们同时在同一个解决方案中构建了多个项目,我们可以得到这样的情况,即并行构建的两个项目试图同时访问相同的本地缓存nuget包


我们肯定不是唯一有这个问题的人,因为这似乎很常见。有人有过这个问题的经验吗?我们做错什么了吗?我们怎样才能防止这些构建失败呢?

所以我终于找到了导致这种情况的原因,尽管我不知道为什么

在Teamcity MSBuild步骤中,我们将工作目录设置为
%build.root%
。删除此值,以便使用默认的检查目录,似乎阻止了该错误的发生