我的ASP.NET Web-Api
解决方案存在问题,我的构建代理无法清除其工作目录,因为某些进程仍在使用库Microsoft.Bcl.Build.Tasks.dll
,因此无法将其删除。我在构建代理中唯一要做的就是使用标准的MSBuild.exe构建解决方案,然后使用MSTest.exe运行一些单元测试。
我注意到Microsoft.Bcl.Build
版本1.0.14(我正在使用的版本)被Microsoft.Net.Http
和Microsoft.Bcl libraries
列为依赖项。
我在代理中的工作流程是这样的:
我的问题是:
有谁知道为什么这个库甚至在几分钟后被某个进程使用? Windows上是否有一个常见的进程可以在后台使用这个库?我会使用流程管理器来查找此文件正在使用的原因,但这些构建计算机被认为是生产框,几乎不可能获得管理员访问权限。
提前感谢您的帮助!
答案 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本身来禁用此功能。
为我修好了。