我有一个解决方案,其中包含大约70个项目,有时(可能是1/5运行)在TFS构建定义的“获取源代码”阶段中,它会因以下错误而停止:
Access to the path 'D:\BuildAgent2018\_work\1\s\Implementation\Release\FileHelpers.dll' is denied.
'FileHelpers.dll'是一个NuGet软件包,我们将其放入解决方案中的多个不同项目中,但是,我们将这些软件包直接提交给源,我们在构建定义中不使用NuGet restore,第一步是“获取来源”-有时会失败。
当软件以发布模式构建时,它会自动将其构建到\ Implementation \ Release文件夹中,但是绝对值得注意的是,在实际的源代码中,\ Implementation \ Release文件夹为空,因此文件名为'FileHelpers。 dll”只能通过以发布模式构建的项目到达那里,这意味着“ FileHelpers.dll”来自构建服务器上的先前构建。
我听说禁用多线程构建可以解决此问题,因为可能是多个项目同时复制/删除同一文件,这可能是导致此问题的原因,但是,所有解释都说明了这一点。的行:
确保使用以下命令明确运行MSBuild:
/p:BuildInParallel=false
或
/m:1
这似乎没有效果,因为我唯一可以指定该参数的位置是在项目构建步骤中,并且错误发生在“获取源代码”步骤(在构建步骤之前) )。
奇怪的是,当我遇到此问题时,此问题会在此之后的每个构建中发生,并且只能通过重新启动来解决,这使我认为多线程方案的可能性较小。
我们一次也只能运行1个构建(代理具有构建队列)。
我们为映射的存储库启用了“清理”。
任何想法都可能导致此“对路径'X.dll'的访问被拒绝”。错误?
如果您需要我发布更多详细信息或代码段,请发表评论,我很乐意这样做!
编辑-“ TE.ProcessHost.Managed.exe”正在使用该文件,即使未运行内部版本