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

问题:

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

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

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

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

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

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

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

I’ve got a C# webforms app, that until today had been working just swimmingly.Now today, all of a sudden, every time I try run the app, I get a file locking error:Unable to copy file “obj\\Debug\\MyProject.exe” to “bin\\Debug\\MyProject.exe”.The process cannot access the file “bin\\Debug\\MyProject.exe” because it is being used by another process.Googling the error doesn’t come up with anything beyond the obvious, ie VS thinks the file is locked.And it is definitely Visual Studio itself that locks the file, because when I close VS and reopen it, the project executes fine – the first time.When I try to run it a second time, I get the file locking error.Closing VS and reopening every time I want to run the app is not a viable workaround!How do I find out what’s locking the file, and stop it from getting locked?EDIT: Another interesting discovery: I don’t even have to run the app.Just compiling it once causes the file locking;I cannot compile twice in a row!This problem is specific to one project in my solution.All other projects work fine and can be executed as many times as I like.It’s only this one project that gets itself locked up.

解决方案:

方案1:

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

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

屏幕截图

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

方案2:

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

…一切仍然正常。

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

黑魔法。 如果可行,有时最好不要问为什么-接受它然后继续…

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

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

方案3:

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

方案4:

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

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

在预构建选项中。 这个问题困扰了我很长时间,直到约翰·W·提到这个复选框时,我什至注意到它的存在,并且认为它没有被选中。

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

方案5:

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

方案6:

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

方案7:

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

方案8:

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

方案9:

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

方案10:

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

net stop iisadmin /y

然后

iisreset

为我工作。 vs 2003

方案11:

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

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

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

方案12:

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

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

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

方案13:

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

方案14:

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

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

方案15:

对我有用的是重新启动IIS

方案16:

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

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

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

方案17:

我有两个Visual Studio实例打开了相同的解决方案。

方案18:

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

方案19:

相同的错误,通过更新Google Nuget支持包解决

方案20:

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

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

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

方案21:

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

方案22:

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

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

方案23:

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

方案24:

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

方案25:

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

方案26:

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

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

方案27:

遇到相同的问题,因此打开了任务管理器(错误提示该进程正在使用该进程),正在运行我的exe。 我结束了任务,之后恢复了正常

参考连接:

https://stackoverflow.com/questions/5134137/5134137