未能删除 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.HttpMicrosoft.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的主要内容,如果未能解决你的问题,请参考以下文章

安装 nuget 包“已添加相同的密钥”。

Nuget 版本不正确?

数据移动,未能继续以NOLOCK方式扫描!

Flutter Firebase - 未能正确删除经过 Google 身份验证的用户

未能删除缓冲区。没有要删除的缓冲区

如果我在程序退出时未能删除顶点缓冲区对象会发生啥?