生成错误:“进程无法访问该文件,因为它正在被另一个进程使用”
我有一个C# webforms
应用程序,直到今天一直在工作只是游泳。
现在,突然之间,每次我尝试运行应用程序,我得到一个文件locking错误:
无法将文件“obj \ Debug \ MyProject.exe”复制到“bin \ Debug \ MyProject.exe”。 该进程无法访问文件“bin \ Debug \ MyProject.exe”,因为它正在被另一个进程使用。
谷歌search错误没有拿出任何超越明显,即VS认为文件被locking。 而且肯定是Visual Studio本身locking文件,因为当我closuresVS并重新打开它时,项目执行得很好 – 第一次。 当我尝试再次运行它时,出现文件locking错误。
closuresVS并重新打开每一次我想运行应用程序是不是一个可行的解决方法! 如何找出locking文件的内容,并阻止它被locking?
编辑:另一个有趣的发现:我甚至不必运行应用程序。 只编译一次会导致文件locking; 我无法连续编译两次!
这个问题是特定于我的解决scheme中的一个项目。 所有其他项目都可以正常工作,并且可以按照我喜欢的次数执行。 只有这个项目被locking了。
我find了一个适合我的简单解决scheme。 它是这样的:
发生问题时,只需更改顶层的构buildconfiguration(如果在“发布”中为“debugging”,反之亦然),构build然后再转回到之前的configuration并再次构build。
我想更改configuration释放vcshost和devenv。
那么我自己解决了这个问题 – 尽pipe我仍然不知道为什么。 我决定通过从项目中删除所有文件,然后重新添加它们并确定哪个文件是我的麻烦来源来确定问题。 所以,我一个接一个地把文件重新引入到项目中,编译和清理每一步的方式…直到…我添加了最后一个…
…一切仍然正常工作。
我做了一个比较,我的原始.csproj的源代码控制; 没有真正的差异。 甚至当我尝试恢复到以前版本的.csproj时,它仍然工作。
黑魔法。 如果有效,有时最好不要问为什么 – 只要接受它,继续前进…
编辑:问题是一个反复出现的,我相信我已经隔离它,当我有窗体devise器在编译时打开一个抽象/通用的forms。
获得的教训:在编译之前,确保任何抽象或通用表单或控件的表单devise器已closures! 如果没有,你必须closuresVS并重新打开!
我们在这里发现了以下内容:在项目属性页面的“debugging”选项卡中,取消选中“启用Visual Studio托pipe过程”。 我不确定这个属性是什么,但是它一旦没有检查就完成了这项工作。
其实你应该要“启用Visual Studio宿主进程”选中。 无论如何至lessVS2010。 我也有:
如果存在“$(TargetPath).locked”del“$(TargetPath).locked”if exists“$(TargetPath)”if if not exist“$(TargetPath).locked”move“$(TargetPath)”“$ .locked”
在预编译选项。 这个问题困扰了我很长一段时间,直到约翰·W提到这个checkbox,我甚至注意到它已经存在并且低下了,而且它已经没有被检查了。
还要注意,即使在不debugging时,-app-vshost.exe也会在后台运行。 每当我猜测,这就是成功构build和运行的原因。 它没有运行过。 我也尝试清理debugging和释放文件夹,并不断改变目标types,没有任何工作,除非如上所述。 我之前的解决scheme是在构build之间等待5分钟,这让超级烦人和耗费时间来完成任何事情。 我还没有看到任何行为的变化,哪些标签打开或打开XNA窗口窗体或devise器。 这个问题发生在32位或64位构build中,如果我使用ALT-F4杀死了一个应用程序,或者用任务pipe理器杀死了这个应用程序,那理论上就不允许应用程序closures或释放资源。 起初我以为这是一个垃圾收集问题。
稍晚了,但我解决了这个问题,通过转到项目的属性>选项卡“debugging”>取消选中“启用Visual Studio托pipe过程”。
我通过重命名locking的文件(使用Windows资源pipe理器)克服了这个问题。 我没有被允许删除文件,但重命名locking的文件的作品!
VS2017 – 通过在Windows任务pipe理器中closuresMSBuild.exe的所有实例来解决
对我来说,这是一个安装并运行的Windows服务。 一旦我停下来,构build就成功了。
从运行框中运行此命令:
net stop iisadmin /y
接着
iisreset
为我工作。 vs 2003
只要检查参考,并删除项目的自我引用。
说明:创build自定义控件后,我的问题就开始了,并将其拖放到工具箱选项板中,以便在devise表单中使用它。 首先出现警告说,自定义控件源文件(.cs)和项目可执行文件(.exe)之间有冗余。 在执行/debugging出现错误:无法访问(.exe),因为它正在使用(这是真的)。
我从字面上删除了关于自定义控件的整个源代码,问题依然存在,直到我检查了引用,并且引用自身以便“能够”获得以前的自定义控件。 我删除了参考和完成!
我解决了这个问题,通过删除文件夹bin \ Debug,并可能重新启动VS
我在Visual Studio的Xamarin应用程序中遇到了同样的问题,并通过拔出testing移动设备来解决问题。 应用程序已closures,debugging器已停止,但尝试构build或重新构build解决scheme时仍然出现错误。 它只是在我拔掉设备后才停止,因为我必须接到电话。
只要扔我的2美分。 我的问题解决了打开任务pipe理器和杀死应用程序。 它在后台运行,没有任何迹象表明它在运行(任务栏中没有任何项目,没有用户界面,没有任何内容),但我不知道为什么会发生这种情况。 很明显,debugging器没有运行,我只有一个VS打开的实例。 令我感到惊讶的是,这个VS VS 2017仍然在发生。
也许我可以添加一个构build步骤,查找运行后台的应用程序,并在开始新的应用程序之前将其杀死。
你的networking应用程序如何configuration? 它是否在Cassini(托盘Web服务器)或IIS下运行?
这不应该正常发生。 我想ProcessExplorer可以告诉你一个进程已被locking的文件。 如果不是进程pipe理器其他sysinternals工具之一。
甚至在下载其中一个SI工具之前要尝试的一件事就是停止Cassini Web服务器,然后查看是否释放了该文件。
什么对我来说是重新启动IIS
我也有同样的问题。 改变debugging/发布configuration没有办法。 至less不是没有build筑物之间。
在我的解决scheme(winform)中,通过在devise器中打开winform的mainform来解决这个问题。 切换到代码(F7)。 然后closures代码,closureswinform的devise器并重build所有(ctrl-shift-B)。 这对我有效。
似乎像Winform应用程序(运行一个后台工作)内的某种处理,仍然有一些其他库使用的文件句柄。
最近遇到这个问题时,试图build立一个解决scheme,我正在工作(不只是一个winforms proj)。
除了build
失败之外,我注意到清理项目会悄然失败(检查bin文件夹显示文件没有被实际删除),closuresVisual Studio并没有结束devenv
过程,而是导致了它的崩溃。 Windows恢复过程将重新启动Visual Studio。
经过一些试验和错误,我发现问题只发生在我打开VS的“最近”菜单上的解决scheme。
从File >> Open >> Project/Solution
发现它按照平常工作。
目前不知道为什么 – 将继续研究这个,但现在,至less我可以工作!
我有两个Visual Studio实例打开相同的解决scheme。
在我的情况下,有一些vstest进程正在运行(使用各种名称,但都包含stringvstest)。 我不得不在taskmgr中终止它们。
我把头发拉了几个星期后终于find了适合我的东西,并且想到我会把它发给其他一些可能帮助的可怜的灵魂。 我不知道为什么这个工作,但对我来说,但它确实:
我明确地将退出我的应用程序的代码行从Application.Exit
更改为System.Windows.Forms.Application.Exit
,现在它工作。 也许它也适用于你。 干杯。