由于 vmwp.exe 文件锁定,Visual Studio 构建在将文件复制到 bin 目录时失败

Posted

技术标签:

【中文标题】由于 vmwp.exe 文件锁定,Visual Studio 构建在将文件复制到 bin 目录时失败【英文标题】:Visual studio build fails while copying files to the bin directory due to file locks by vmwp.exe 【发布时间】:2021-06-19 11:50:33 【问题描述】:

我在 Docker 容器中运行我的开发环境。由于我已经完成了一些更新,因此在尝试重建在 Docker 容器中运行的项目时遇到了一些困难。

我的项目在运行 IIS 的 Windows Server Core Docker 容器中运行,并且我从主机上的共享卷运行该项目。我可以在启动 docker 容器之前构建项目,但是在启动 docker 容器后构建失败并出现以下错误:

Could not copy "C:\path\to\dll\name.dll" to "bin\name.dll". Exceeded retry count of 10. Failed. The file is locked by: "vmwp.exe (22604), vmmem (10488)"

Hyper-V 进程似乎正在锁定 DLL 文件。这显然不是以前的情况,这似乎与我所做的一些 Docker 或 Windows 更新有关。我该如何解决这个问题?我是否需要更改构建应用程序并在我的 Docker 容器中运行它的过程?

我已经搜索了一段时间,但我找不到太多关于这个特定问题的信息。任何帮助,将不胜感激。提前致谢!

【问题讨论】:

您找到解决方案了吗?我遇到了同样的问题。 遗憾的是,现在我只是在做 docker compose down and up 来重建项目。我已经看到一些在预构建步骤中使用“App_Offline”文件的解决方案,但我也无法让它工作。在检查 docker 容器时,我发现是容器内的 IIS 锁定了文件,但我找不到正确的解决方案。 Repo 使用dotnet watch 重现问题 -- github.com/nickwesselman/dotnet-docker-lock-issue 用 docker/for-win 记录了这个...+1 会有帮助。 github.com/docker/for-win/issues/12028 Docker 将我重定向到 moby 项目以记录问题:github.com/moby/moby/issues/42803 【参考方案1】:

我遇到过类似的问题。通过从 docker-for-windows 界面停止/删除正在运行的应用程序容器来解决。 docker rm -f 也可以。

【讨论】:

【参考方案2】:

可能的解决方案:

    如果您使用 Docker Windows 容器,请确保在两个环境(您的物理机和 docker 上)上至少有 Windows 10.0.1809 - 运行 CMD,您会在上面看到。 在运行 docker 时对进程使用隔离标志:--isolation process。

在物理机器上,两个 vmxxx(较低和较高的 PID)(不记得确切名称)进程正在保存 *.dll 文件(构建在使用构建工具 2019 的 docker 端进行)。

简短说明:

    第一个 MSbuild 错误发生是因为 msbuild 尝试删除文件 - 访问被拒绝 - 可能是这个 vm 进程处理文件。 发生第二个 Msbuild 错误(第一个 vmxxx 导致该错误)表明将相同的 dll 文件从一个方向复制到另一个方向是不可能的,因为系统锁定 (4)。

在 docker 上构建期间,两个 vmxxx 进程都保留了一个 dll 文件。它在“Process Explorer”工具中可见(使用 Sysinternals 的完整版本) 一个 vmxxx 的 PID 数量较少,它锁定了 dll 文件,并且在具有较高 PID 数量的第二个进程尝试对其进行处理之前不释放它。 它是一个由两个不同进程保存的随机 dll 文件。

此外,在 msbuild 上仅使用和定义一个没有并行的 CPU 并没有解决之前的问题。在 docker 上也是如此,您可以在其中管理 cpu 和内存。最终在 docker 上隔离解决了这个问题。

当您从 docker 容器构建项目时,隔离应该处理进程。

【讨论】:

以上是关于由于 vmwp.exe 文件锁定,Visual Studio 构建在将文件复制到 bin 目录时失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio,如何防止网络共享上的发布项目被用户锁定?

从NPM添加bootrap反应在Visual Studio中创建另一个程序包锁定文件

DLL 锁定 - Visual Studio 2010 C++

锁定 Windows 8.1 时 Visual Studio 2013 和 2015 崩溃

在 Visual Studio 2010 中锁定 texbox 滚动条

由于 Yarn 和 npm 锁定文件冲突,Heroku 构建失败