生成错误:“该进程无法访问该文件,因为该文件正在被另一个进程使用”


88

我有一个C#webforms应用程序,直到今天一直在畅快地工作。

今天,突然之间,每当我尝试运行该应用程序时,都会收到文件锁定错误:

无法将文件“ obj \ Debug \ MyProject.exe”复制到“ bin \ Debug \ MyProject.exe”。该进程无法访问文件“ bin \ Debug \ MyProject.exe”,因为它正在被另一个进程使用。

谷歌搜索错误不会带来明显的错误,即VS认为文件已锁定。它是绝对的Visual Studio本身锁定文件,因为当我关闭VS并重新打开它,项目执行罚款-第一次。当我尝试第二次运行它时,出现文件锁定错误。

每次我要运行该应用程序时,关闭VS并重新打开都不是可行的解决方法!如何找出锁定文件的内容,并阻止它被锁定?

编辑:另一个有趣的发现:我什至不必运行该应用程序。只需编译一次就会导致文件锁定。我不能连续两次编译!

此问题特定于我的解决方案中的一个项目。所有其他项目都可以正常运行,并且可以执行多次。只是这个项目被锁定了。


您可以尝试杀死vshost.exe看看是否有帮助?
rene 2011年

@rene-没有vshost.exe进程。他们在VS 2010中重命名了吗?
舒尔·贝尔

[您应用的名称] .vshost.exe
2011年

@rene-不,在该名称的当前进程中什么都没有显示
Shaul Behr

1
@Shaul您是否已在表单中添加了自定义用户控件?尝试运行前关闭设计师stackoverflow.com/questions/2690119/...
刘若英

Answers:


133

我找到了一个对我有用的简单解决方案。它是这样的:

出现问题时,只需更改顶部的构建配置(如果在“发布”中将其更改为“调试”,反之亦然),则进行构建,然后再更改回先前的配置并再次构建。

屏幕截图

我想更改配置会释放vcshost和devenv。


2
最佳答案,IMO。(啊,他给了自己信用。)
杰森·

这是一个不错的解决方法!尽管有时由于某种原因它会停止工作(?)。
Christopher D. Emerson

3
@ChrisEmerson我也注意到了。我可以切换到Release并构建和运行该应用程序,但切换回Debug后甚至不能构建该项目。
扎克

我最终不得不重新启动Visual Studio以摆脱该程序集。我尝试重置IIS和上述解决方案,但仍然可以看到dll文件位于文件夹C:\ Windows \ Microsoft.NET \ assembly \ GAC_MSIL
Guo

1
这只工作了一次,然后再也没有了。即使重启VS也没有。无论我在Release和Debug之间切换多少,它都将失败。
Frank H.

24

好吧,我自己解决了这个问题-尽管我仍然不知道为什么。我决定通过从项目中删除所有文件,然后重新添加它们并确定哪种文件是造成我麻烦的方式来隔离问题。因此,我一个接一个地将文件重新引入到项目中,编译并清理了每一步...直到...我添加了最后一个...

...一切仍然正常。

我对原始.csproj的源代码控件进行了比较;没有真正的区别。即使我尝试还原到.csproj的先前版本,它仍然可以工作。

黑魔法。如果可行,有时最好不要问原因-接受并继续...

编辑:问题是一个反复出现的问题,我相信我已经将它隔离到在编译时打开抽象/通用表单的表单设计器时。

经验教训:编译之前,请确保关闭任何抽象或通用窗体或控件的窗体设计器!如果没有,您必须关闭VS并重新打开!


1
也许是因为删除该文件后,无论哪个进程都不再访问该文件。删除所有文件应该确实可以解决该问题。好想法。
杰夫·拉法

2
仅命令行项目(无格式)仍然会发生这种情况,因此我不确定您是否真的在处理任何事情。
扎克

16

我们在这里发现的内容如下:在项目属性页的“调试”选项卡中,取消选中“启用Visual Studio托管过程”。我不确定此属性的用途,但是一旦取消选中它就可以完成工作。


4
它确实解决了问题,但Console.WriteLine()不再在“输出”窗口中输出字符串。
Pierre Fournier

2
取消选中控制台应用程序上的框后,问题仍然存在。
扎克

2
它适用于Windows客户端项目。我取消选中该框,成功构建,然后再次选中它并再次成功构建。
飞雪

1
不为我工作。现在,应用本身已锁定。不托管应用。
鲍里斯·伊凡诺夫

9

实际上,您应该选中“启用Visual Studio托管过程”。无论如何,至少对于VS2010。我也有:

如果存在“ $(TargetPath).locked”删除“ $(TargetPath).locked”如果存在“ $(TargetPath)”如果不存在“ $(TargetPath).locked”移动“ $(TargetPath)”“ $(TargetPath) .locked”

在预构建选项中。这个问题困扰了我很长时间,直到John W.提到此复选框时,我什至注意到它存在并且低下,并认为它尚未被选中。

还要注意,即使未调试,-app-vshost.exe也会在后台运行。是什么让它每次我猜都​​能成功构建和运行。它以前没有运行过。我还尝试清理debug和release文件夹,并不断更改目标类型,但如上所述没有任何作用。我之前的解决方案是在每次构建之间仅等待5分钟,这使完成工作变得非常烦人和耗时。在打开哪个选项卡或打开XNA vs Windows窗体或打开设计器时,我还没有看到行为上的任何变化。此问题发生在32位或64位版本中,无论我用ALT-F4杀死一个应用程序还是用任务管理器杀死它都没关系,从理论上讲,这将不允许该应用程序关闭或释放资源。起初,我认为这是一个垃圾回收问题。


最后的预构建事件脚本终于为我解决了这个问题-谢谢!
Christopher D. Emerson

这是对我没有任何帮助的唯一评论,我无法相信这么简单的问题在没有补丁的情况下仍然存在多年。
ConstantineK

7

VS2017-通过在Windows任务管理器中关闭MSBuild.exe的所有实例来解决


5

有点迟了,但是我可以通过转到项目的属性>“调试”选项卡>取消选中“启用Visual Studio托管过程”来解决此问题。


4

我通过重命名锁定的文件(使用Windows资源管理器)解决了这个问题。不允许删除文件,但是重命名锁定的文件有效!


到目前为止,这是唯一对我有用的解决方案。很好的解决方案。为我省去了重启的麻烦。
JHubbard80 '16

将此作为预构建会很好。我总是有这个问题!很烦人。
Shimmy Weitzhandler's

4

我通过删除文件夹bin \ Debug解决了这个问题,可能还需要重启VS


问题是您不能每次都这样做。对我来说,每次重建并尝试运行该应用程序时都会发生错误。
FrenkyB

2

对我而言,这是已安装并正在运行的Windows服务。一旦我停止它,构建就成功了。


2

从运行框中运行以下命令:

net stop iisadmin /y

然后

iisreset

为我工作。vs 2003


1

最近在尝试构建我正在研究的解决方案时遇到了这个问题(不仅仅是Winforms项目)。
除了build失败,我还注意到清理项目会悄然失败(检查bin文件夹显示文件实际上并未被擦除),并且关闭Visual Studio并没有结束devenv过程-而是导致了崩溃。Windows恢复过程随后将重新启动Visual Studio。

经过一番尝试和错误后,我发现问题只有在我从启动VS的“最近”菜单中打开解决方案时才发生。
从中打开解决方案,File >> Open >> Project/Solution发现它通常可以正常工作。

目前不知道为什么-会继续研究这个问题,但至少现在我可以工作!


1

只需检查引用并删除对项目的自引用。

说明:我的问题在创建自定义控件并将其拖放到工具箱选项板以在设计表单中使用后开始。首先出现警告,说自定义控件源文件(.cs)和项目可执行文件(.exe)之间存在冗余。在执行/调试时出现错误:无法访问(.exe),因为它正在被使用(确实如此)。

我从字面上删除了有关自定义控件的整个源代码,问题仍然存在,直到我签出了引用,并且它正在引用自己,以便“能够”获得以前的自定义控件。我删除了参考并完成了!!


1

我在Visual Studio中的Xamarin应用程序上遇到了相同的问题,并且通过拔出测试移动设备来解决了该问题。该应用程序已关闭,调试器已停止,但在尝试构建或重建解决方案时仍发生错误。它只是在我拔出设备后才停止,因为我必须接听电话。


1

只是丢下我的2美分。我的问题通过打开任务管理器并杀死该应用程序得以解决。它在后台运行,没有任何迹象表明它正在运行(任务栏中没有任何项目,没有ui,什么也没有),但是我不确定为什么会这样。显然,调试器未运行,当时我只打开了一个VS实例。令我惊讶的是,这在VS 2017中仍在发生。

也许我可以添加一个构建步骤,以寻找运行后台的应用程序并在启动新应用程序之前将其杀死。


1

我遇到了同样的问题,无法使用以前的答案中提到的任何方法来纠正。我通过杀死任务管理器中的所有“ SSIS调试历史记录(32位)”实例解决了该问题,现在可以正常工作。


0

您的网络应用如何配置?它是否在Cassini(托盘Web服务器)或IIS下运行?

不过,这通常不应该发生。我认为ProcessExplorer可以告诉您进程已锁定了哪些文件。如果没有,进程浏览器是其他sysinternals工具之一。

甚至下载其中一种SI工具之前要尝试的一件事是停止Cassini Web服务器,然后查看是否释放了文件。


它不是网络应用程序;这是winforms。
Shaul Behr

3
嗯,那么当您从“我有一个C#Webforms应用程序...”开始时,您可能想编辑您的问题
Andy


0

我也有同样的问题。更改调试/发布配置并不能解决问题。至少在两者之间没有建立。

在我的解决方案(winform)中,是通过在设计器中打开winform的主窗体来解决的。切换至代码(F7)。然后关闭代码,关闭winform的设计器并重新生成所有(ctrl-shift-B)。这对我有用。

似乎来自winform应用程序(运行backgroundworker)中的某种句柄仍然在其他一些使用的库上具有文件句柄。



0

就我而言,有一些vstest进程正在运行(名称各异,但都包含字符串vstest)。我必须在taskmgr中终止它们。



0

当我结束该过程时.Net Core Host,一切正常。我不必关闭Visual Studio或进行其他任何更改。


0

对于使用Docker在VS中进行开发的人员,请重新启动Windows服务的docker,该问题将立即得到解决。

在重启docker之前,我尝试了所有提到的答案,没有找到运行的msbuild.exe进程,也尝试了无济于事地重启VS,仅重启了docker才有效。


0

另一种解决方案:当文件被锁定时,报告阻止过程(类似“ ServiceHub.Host.CLR.x64(7764)”),其ID放在括号中。要摆脱该过程,请打开PowerShell(x + Win + I)并键入:“ Stop-Process -Id idNumber”。


0

我最近在部署到Service Fabric时遇到了这个问题。该错误表明一个“文件”正在使用中,但是,我发现该端口正在被另一个IDE使用。通过停止已经在端口上托管的正在运行的服务,我能够阻止发生此异常。


0

我曾经遇到过同样的问题。我尝试了上面列出的“几种解决方案”,但它们对我不起作用。

我通过从服务器资源管理器中关闭连接来解决此问题,并关闭了在Visual Studio中打开的所有选项卡。


0

如果这是一个SSIS项目,则打开任务管理器并杀死所有DtsDebugHost.exe实例,这些实例应释放锁定的文件。


0

我使用Visual Studio Code,并且由于开发服务器正在运行而收到此错误(我通过按来运行开发服务器Ctrl + F5)。

因此,我只需单击停止标志即可将其停止,错误消失了。


0

我遇到了这个问题(这个问题我在其他地方不仅看到了VS)。

这是由Dropbox造成的(在我的情况下)。编辑一些代码并运行后,有时dropbox立即锁定文件(以便它可以处理它)。

解决方案1.再次点击运行

解决方案2.暂停保管箱。(如果您使用保管箱作为云备份,则不好)

解决方案3.从保管箱同步列表中删除构建文件夹。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.