为什么我在 Visual Studio 调试时会出现“文件正在被其他进程使用”的错误?

32

使用 Visual Studio 2010 beta,当我在 IDE 中运行我的应用程序进行调试时,第一次完美运行。但是,在关闭调试会话后,无论是关闭应用程序还是点击停止调试按钮,所有后续尝试调试应用程序的尝试都会失败,并出现以下错误:

错误1 无法将文件 "obj\Debug\Application.dll"复制到"bin\Debug\Application.dll"。由于该文件正在被另一个进程使用,因此无法访问文件“bin \ Debug \ Application.dll”。

SysInternals 的 Handle.exe 显示有句柄处于打开状态,但是即使我关闭了这些句柄,错误仍然存在。任何手动尝试删除该文件的操作都会导致“拒绝访问”的错误消息。

为了解决这个问题,我必须完全重新启动 Visual Studio,之后 Debug 会话仅能成功运行一次并再次停止。

我不确定这个问题开始发生的时间,但我相信它是比较近的。

更新: 当我强制关闭 Application.dll 上的 handle 后,我从 VS 得到以下错误:

错误1 无法将文件 "obj\Debug\Application.dll" 复制到 "bin\Debug\Application.dll"。请求的操作无法在具有用户映射的部分打开的文件上执行。

什么是“用户映射部分”?

更新2: 看起来这个问题发生在我在 Design 视图下打开一个 Form 尝试进行调试时。我将进行进一步故障排除并发布我的结果。

更新3: 我认为我已经将问题缩小到了使用 UserControl 的表单上。


1
你尝试过杀掉Applocation.vshost.exe进程而不是重新启动Visual Studio吗? - Nestor
是的,它是无法被终止的。除非我关闭VS,否则该进程将不会停止。 - Chris Thompson
1
似乎当我以设计视图打开表单时,就会出现这个问题。这对我很有用。我也遇到了您的错误。当我关闭了所有打开的XAML文件后,错误就消失了。 - user2023861
这个问题在Stack Overflow上有一个非常好的答案,Cody Gray在这里提供了解决方案:https://dev59.com/xWgu5IYBdhLWcg3wByi1 - nbadaud
9个回答

14

老实说,这听起来像是 VS2010 的一个 bug。由于某些原因,它在调试器停止时没有关闭打开的句柄。结束 VS 进程将自动关闭这些句柄,从而允许您再次访问文件。作为解决方法,您可以考虑使用免费且功能异常强大的 unlocker。我知道这不是一个好答案,但应该比重启 VS 更快。您还可以考虑发送错误报告...

Unlocker 在 64 位操作系统上无效,LockHunter 可以。


47
等等,克里斯·汤普森回答克里斯·汤普森?哈哈。 - Andy West
2
@Andy 我知道,我看了两遍 ;-) - Chris Thompson
2
这是在VS2010中已确认的错误,在SP1中应该得到解决。 - Chris Thompson
1
等等!谁是谁?! - lorengphd

10
这是我如何解决这个问题的方法:
* 打开项目属性, * 选择构建选项卡, * 清除输出路径, * 构建(这将在根文件夹中创建dll) * 回到输出路径并选择浏览(浏览到bin目录以进行调试/发布),完成!

这在我的VS2015中再次出现了,而这解决了我的问题。 - interesting-name-here

9
根据TarmoPikaro的回答,有时候Visual Studio会创建多个msbuild.exe幽灵进程,并且这些进程会在构建后继续存在,导致文件锁定。解决方法如下:

解决方案1 - 结束幽灵MSBuild.exe进程

结束msbuild.exe进程是一次性的解决方案,需要每次构建都进行。

您可以按照以下方式结束进程mrtumnus:

taskkill /f /im MSBuild.exe

解决方案2 - 在Visual Studio中禁用并行构建

您可以彻底禁用并行构建:

工具 > 选项 > 项目和解决方案 > 构建和运行 > "最大并行项目生成数" - 默认值为8,将其切换为1。

当然,现在构建速度会慢一些,但具体情况可能因使用情况而异。

这与错误:由于正在被另一个进程使用,无法访问文件bin/Debug/...有关。

这个解决方案很好,不需要使用第三方工具(如被接受答案中建议的那些工具)! - Mephisto

3
我见过Windows索引服务引起这种情况。禁用它可以解决问题。病毒扫描程序也可能是原因之一。据说多个Application.Close()调用也会导致这种情况。
当然,由于第一次总是正常的,所以这些可能性不大。

2

我有同样的问题。以下几点有所帮助:

  1. 在调试时关闭所有设计文件
  2. 使用解锁器(unlocker)

另外,我的应用程序打开了一个端口。在调试期间抛出异常并退出程序时,关闭了该端口。这也有所帮助。

但是,毫无疑问,这是VS2010的bug。


1

我遇到了同样的问题,我的情况是在Visual Studio中打开了相关文件。关闭所有文件后问题得以解决。


0

我曾经遇到过同样的错误,而且陷入其中多日。最终解决了这个问题。 我正在处理一个项目,其中添加了许多类库。我将这些库的引用添加到我的主项目中,并错误地将对同一项目的引用添加到自身。因此,当我删除自引用时,它就可以工作了。


0
如果您在VS Code上遇到此错误;
请点击终端屏幕并使用“Ctrl + C”停止运行。

0

我自己也遇到了这个问题。我打开了项目属性窗口,这显然创建了一个文件锁。即使我关闭了窗口,文件锁仍然存在,我不得不重新启动VS。

P.S. 我正在使用VS 2019。我发帖是为了帮助那些遇到和我一样问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接