未能删除 Microsoft.Bcl.Build.Tasks.dll
Posted
技术标签:
【中文标题】未能删除 Microsoft.Bcl.Build.Tasks.dll【英文标题】:failed to remove Microsoft.Bcl.Build.Tasks.dll 【发布时间】:2015-01-08 10:48:42 【问题描述】:我的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
列为依赖项。
我在代理中的工作流程是这样的:
将 git 存储库克隆到代理 使用 msbuild 构建解决方案 使用 mstest 测试解决方案 一段时间后,也许 10 分钟,我尝试清理当前迭代 由于所述错误,文件清理失败我的问题是这样的:
有谁知道为什么这个库在几分钟后仍被某个进程使用? Windows 上是否有在后台使用该库的通用进程?我会使用进程管理器来找出为什么使用这个文件,但是这些构建机器被认为是生产机器,几乎不可能获得管理员访问权限。
提前感谢您的帮助!
【问题讨论】:
你试过用 Handle 或 LockHunter 敲击它吗?您是否尝试过将/nr:false
传递给 MSBuild?
【参考方案1】:
首先通过LockHunter之类的程序从进程中删除所有用法,然后重新启动VS。它对我有用
【讨论】:
出于相同目的使用了 Process Explorer 的 Find 选项,但 LockHunter 实用得多。感谢您指出。【参考方案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?
【讨论】:
如果它发生在编译时,您的答案似乎可以解决问题......但是我的解决方案在编译时没有问题。只是过了一段时间。您是说该解决方案可以正确编译,但稍后仍有一些目标锁定问题? 我亲眼看到 VS 在构建过程中一直锁定 dll,直到 VS 进程退出(超出您所期望的构建生命周期),但我不希望它来自构建代理。看看添加此属性是否有帮助:***.com/a/22825192/179223 如果有效,您可以通过命令行参数有条件地添加属性,而不是操作 csproj 文件。【参考方案3】:我刚刚在我的 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://***.com/a/12193759/98491
长话短说:msbuild 进程保持开放以在构建时提高性能。这可以通过设置环境变量 MSBUILDDISABLENODEREUSE=1 或将 /nodeReuse:false
传递给您的 msbuild 本身来禁用。
这为我解决了问题。
【讨论】:
以上是关于未能删除 Microsoft.Bcl.Build.Tasks.dll的主要内容,如果未能解决你的问题,请参考以下文章