无法删除Microsoft.Bcl.Build.Tasks.dll

时间:2014-11-11 19:03:52

标签: c# asp.net .net windows msbuild

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

我注意到Microsoft.Bcl.Build版本1.0.14(我正在使用的版本)被Microsoft.Net.HttpMicrosoft.Bcl libraries列为依赖项。

我在代理中的工作流程是这样的:

  • 将git repo克隆到代理
  • 使用msbuild构建解决方案
  • 使用mstest
  • 测试解决方案
  • 一段时间后,也许10分钟,我尝试清理当前的迭代
  • 由于描述的错误而导致文件清除失败

我的问题是:

有谁知道为什么这个库甚至在几分钟后被某个进程使用? Windows上是否有一个常见的进程可以在后台使用这个库?我会使用流程管理器来查找此文件正在使用的原因,但这些构建计算机被认为是生产框,几乎不可能获得管理员访问权限。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

首先通过LockHunter之类的程序删除进程中的所有用法,然后重新启动VS.它对我有用

答案 1 :(得分:2)

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

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

这个问题有更详细的内容。关于Microsoft.Bcl.Build是什么以及如果您感兴趣它的用途的链接:What does the Microsoft.Bcl.Build NuGet package do?

答案 2 :(得分:2)

我刚刚在我的gitlab构建服务器上遇到了同样的问题,它在每个构建集之前都会git fetch

将nuget中的Microsoft.Bcy.Async添加到我的项目后,构建失败后的步骤warning: failed to remove packages/Microsoft.Bcl.Build.1.0.14/tools/Microsoft.Bcl.Build.Tasks.dll

使用LockHunter,我确定了几个msbuild.exe任务。

根据该信息,我在此处找到了解决方案:https://stackoverflow.com/a/12193759/98491

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

为我修好了。