C# 未能删除Microsoft.Bcl.Build.Tasks.dll

C# 未能删除Microsoft.Bcl.Build.Tasks.dll,c#,asp.net,.net,windows,msbuild,C#,Asp.net,.net,Windows,Msbuild,我的ASP.NET Web Api解决方案有问题,我的生成代理无法清理其工作目录,因为库Microsoft.Bcl.build.Tasks.dll仍被某些进程使用,因此无法删除。我在构建代理中所做的唯一事情是使用标准的MSBuild.exe构建解决方案,然后使用MSTest.exe运行一些单元测试 我注意到Microsoft.Bcl.Buildversion 1.0.14(我使用的版本)被Microsoft.Net.Http和Microsoft.Bcl库列为依赖项 我在代理中的工作流如下所示:

我的
ASP.NET Web Api
解决方案有问题,我的生成代理无法清理其工作目录,因为库
Microsoft.Bcl.build.Tasks.dll
仍被某些进程使用,因此无法删除。我在构建代理中所做的唯一事情是使用标准的MSBuild.exe构建解决方案,然后使用MSTest.exe运行一些单元测试

我注意到
Microsoft.Bcl.Build
version 1.0.14(我使用的版本)被
Microsoft.Net.Http
Microsoft.Bcl库
列为依赖项

我在代理中的工作流如下所示:

  • 将git回购克隆到代理
  • 使用msbuild构建解决方案
  • 使用mstest测试溶液
  • 一段时间后,也许10分钟,我尝试清理当前的迭代
  • 由于所述错误,文件清理失败
我的问题是:

有人知道为什么这个库在几分钟后仍被某些进程使用吗?windows上是否有在后台使用此库的通用进程?我会使用process manager来找到为什么使用这个文件,但是这些构建机器被认为是生产机器,几乎不可能获得管理员访问权限


提前感谢您的帮助

如果您的解决方案包含自定义msbuild目标,而这些相同的msbuild目标正被同一解决方案中的另一个csproj使用,则您将在编译时遇到冲突。实际上,您可能会在编译中期尝试编译编译过程的一部分,并且会遇到这些类型的文件锁定错误。解决方法是将自定义msbuild目标项目拆分为单独的解决方案,并根据需要进行构建。我认为在任何时候重建依赖于msbuild目标的项目时,都需要卸载并重新加载它们。有一两次,我需要重新启动VS

如果未添加任何自定义msbuild任务,则可以通过查看已安装的NuGet软件包来找出导致问题的原因。右键单击解决方案,然后单击“管理NuGet软件包”。尝试从已安装的软件包列表中删除
Microsoft.Bcl.Build
。它应该失败,因为有东西依赖于它。记下它所依赖的包。如果第一个建议没有帮助,请发回一条评论,说明哪些软件包依赖于它,我将看看我是否可以挖掘/记住我以前在哪里见过这个


这个问题有更多关于Microsoft.Bcl.Build是什么以及它的用途的详细信息和链接,如果您感兴趣的话:

首先通过以下程序从进程中删除任何用法:,然后重新启动VS.它对我有效

我只是在我的gitlab构建服务器上遇到了同样的问题,它在每个构建集之前执行一个
git获取

Microsoft.Bcy.Async
从nuget添加到我的项目后,生成后的步骤失败,警告:无法删除包/Microsoft.Bcl.build.1.0.14/tools/Microsoft.Bcl.build.Tasks.dll

通过LockHunter,我确定了几个msbuild.exe任务

根据这些信息,我在此处找到了解决方案,因此:

长话短说:msbuild进程保持打开状态,以在生成时提高性能。可以通过设置环境变量MSBUILDDISABLENODEREUSE=1或将
/noderReuse:false
传递到msbuild本身来禁用此功能


这帮我解决了问题。

你试过用手柄或猎锁器敲击它吗?您是否尝试将
/nr:false
传递给MSBuild?如果问题发生在编译时,您的答案似乎解决了问题。。。然而,我的解决方案在编译时没有问题。只是过了一段时间。你是说解决方案可以正确编译,但以后仍然存在一些目标锁定问题吗?我个人见过VS将锁定到构建过程中涉及的dll,直到VS过程退出(超出您预期的构建生命周期),但我不希望它来自构建代理。查看添加此属性是否有帮助:如果有效,您可以通过命令行参数有条件地添加属性,而不是操纵csproj文件。我们使用Process Explorer的“查找”选项也有同样的目的,但LockHunter更实用。谢谢你指出这一点。