VisualStudio2010debugging – 进程无法访问文件…因为正在被另一个进程使用

我无法debuggingWinForms C#应用程序使用发布版本的Visual Studio 2010教授。

第二次debugging运行后,我收到以下错误信息。

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

我试过了一个预生成脚本来试图删除这个文件,但是它被Visual Studiolocking了。

在网上有几个这样的参考,所以这是一个知道的问题。 有没有人有一个修补程序或有效的解决方法?

我发现这个问题很容易重现,对我来说这个问题是Richard Fors的答案的一个变种。 如果我在devise器中打开一个UserControl,运行debugging器,然后编辑UserControl,后续重build将失败。 如果我在运行debugging器之前closuresUserControl,我从来没有得到这个错误,所以我只是确保在打开F5之前closuresdevise器窗口。

截至2012年10月,我仍然有这个问题,所以VS 2010 SP1没有解决问题。 我做了什么,并一直工作,是禁用项目的托pipe过程。

要禁用主机进程:

. Open a project in Visual Studio. . On the Project menu, click Properties. . Click the Debug tab. . Clear the Enable the Visual Studio hosting process check box. 

资料来源: http : //msdn.microsoft.com/en-us/library/ms185330(v=vs.100).aspx

您可以尝试杀死vshost.exe进程:

 taskkill /F /IM "Arrowgrass Reports.vshosts.exe" 

你也可能是幸运的,只是能够移动有问题的文件。 移动文件可以通过将以下代码行添加到项目的预生成事件中完成:

 if exist "$(TargetPath).locked" del "$(TargetPath).locked" if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked" 

禁用Windowssearch没有解决我的问题。 但是,禁用防病毒软件(我们的防病毒软件是Symantec Endpoint Protection 11)

因此,我可以通过更改项目中的“debugging”设置将工作文件夹指向C:驱动器上的某个path,然后从防病毒自动防护扫描设置中除去该path,从而解决了这个问题。

我希望这可以帮助别人。

我在一个类似的问题上发布了这个答案,但是我想在这里也是这样说的:

好的…这可能听起来很疯狂。

在过去的几年里,我在VS2010中遇到了这个问题。 这里提到的解决方法适用于我,但是很多时候我忘记closures所有的窗体/用户控件。

我发现只是通过以下方式查看打开的文件:

Computer Management (compmgmt.msc)->Shared Folders->Open Files

将“释放”,无论哪个文件被locking。 很奇怪,但对我有用!

在我的情况下,我做了项目属性 – >安全选项卡 – >取消选中一次性安全设置(如果它被选中)。 它为我工作。 在我的项目中,它显示了C ++项目中使用的C ++ dll的这个错误。

所描述的条件也可能由有问题的DLL或EXE引用本身引起; 在这种情况下前面描述的Process Explorertesting永远不会返回一个匹配(例如它没有运行)。 这种意外的情况似乎是在VS2010中的一些操作过程(以及可能的所有以前的版本)中引起的,这些操作在背后隐藏了参考。 这个具体的原因还没有被追踪(或者我知道的解决)。 要检查并解决此错误,只需确保有问题的DLL或EXE未列为对其自身的引用。

当我从两个大的文件(10个源文件,每个文件大约500行)修改(Visual Studio 2010 C#Express with SP1)解决scheme时,出现错误(“进程无法访问文件…因为它正在被另一个进程使用”项目引用另外一个项目,大量(6)较小的项目,大量项目引用其他项目。

引用是对dll和exe文件(它们的Debug版本),而不是项目,即使项目在同一个解决scheme中。

然后我了解到,引用应该是项目,而不是文件,F12才能正常工作。 所以我修改了引用。 这使F12的工作(跳转到源文件,而不是一些自动生成的接口说明),同时在构build过程中的“无法访问文件”错误消失。

发布版本时,我只有“无法访问文件”错误。 引用是exe / dll的debugging版本。 我怀疑这种混合是什么触发VS中的错误。

开发Windows服务时遇到此问题。 当服务运行时我发现它发生了。 因此,你只需要停止服务(从services.msc控制台),你很好去!

希望这可以帮助。 蒂贾尼。

检查指定进程的任务pipe理器,并明确结束进程。 这个解决scheme为我工作。

我不能'写评论,因为不是在50点,但对我来说,我排除了我的项目文件夹中的ESET安装版本5版本。似乎它阻止/ hogged一些文件。 我的错误没有说明哪个exe或文件正在使用,所以花了很长时间才终于到达JoeC所说的有关Antivirus的东西,并试用了它。 似乎正在工作(Visual Studio 2010 SP1)

closures最近更改的用户控制解决了我的情况下的问题。 希望这会帮助那里的人。

请尝试卸载Windows Live SYNC。 它仍然发生?

我想我只是find了罪魁祸首和解决办法。

去服务,停止和禁用“窗口search”服务。

那现在解决了我的问题。

对我来说,解决scheme是将启动项目更改为一个dll(问题只有在作为启动项目的应用程序时,才会在debugging模式下发生)。 如果您的解决scheme包含多个项目(而且会包含.dll,否则您不会遇到问题),请切换到该.dll,否.vshost.exe,没有任何问题。

此外,杀.vshost.exe没有为我工作,因为立即再次启动后,它已locking.dll。

另外,确保你的引用是干净的,特别是在更复杂的项目中,也更喜欢项目引用到程序集引用,等等。 我认为不好的参考文献(通告和类似文章)必然会引起问题,至less我读过。

我在这个问题上的短文(和我的解决scheme)

如何“清理”您的解决scheme中的参考

将以下内容添加到共享dll的预生成事件对我有效:

 if exist "$(TargetPath).locked*" del "$(TargetPath).locked*" set exitprebuildfor$(ProjectName)= for /l %%a in (1,1,10) do ( if defined exitprebuildfor$(ProjectName) goto :ok if not exist "$(TargetPath).locked%%a" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked%%a" & set exitprebuildfor$(ProjectName)=1) :ok set exitprebuildfor$(ProjectName)= 

它基于这里给出的解决scheme,而不是只是重命名DLL。locking它不断尝试将其重命名为.locked1,locked2。 使用10我通常会每天遇到一次问题,但是可以使用ant值。

只需复制整个项目并从新副本运行项目….它将正常工作。 但是,您必须以某种方式结束debugging过程才能删除较旧的项目。

停止IIS服务,并尝试再次build立它,或者如果你能负担得起重新启动你的电脑,试试看。 为我工作的两种方式。

干杯

我的问题是,Outlook 2010(outlook.exe)使用相同的端口作为我的ASP.NET MVC项目与IIS Express。

解决scheme:closuresoutlook.exe,运行你的解决scheme,并再次打开Outlook(使其使用另一个端口)。

希望这有助于某人,因为我收到了与本主题中所述相同的错误消息。

尝试删除debugging或释放文件夹中的.exe文件(无论你在哪里工作)Windows将提示,进程X已经打开这个,你不能删除它之后去任务pipe理器和详细信息选项卡结束任务X进程

删除obj文件,停止服务并重新启动,然后解决问题

对我来说,最好的解决scheme是将我的项目文件移出IT部门pipe理的服务器上的“我的文档”,并在本地C盘上find它们。 另外工作:取消选中“启用Visual Studio托pipe过程”checkbox,如其他人所述。

如果您正在使用C DLL的引用的C#项目,则可以通过选中允许不安全代码checkbox来消除错误。 我知道我没有在我的C#项目中使用指针,但我在C#中使用了一些按位运算符。 可能是这些类似C的function将其变成“不安全”的代码。

我的工作是删除“只读”状态的bin文件夹。 一旦我这样做了,它一直工作。

当项目在远程共享上时(例如,如果您的$ env:homepath被IT部门有效地redirect到networking共享),我遇到了这个错误。 确保您的项目驻留在本地驱动器上。

我的问题是在创build一个自定义控件之后开始的,并将其拖放到工具箱面板中,以便在devise表单中使用它。 首先出现警告说,自定义控件源文件(.cs)和项目可执行文件(.exe)之间有冗余。 在执行/debugging出现错误:无法访问(.exe),因为它正在使用(这是真的)。

一个字面上删除了关于自定义控件和最后一个问题从来没有停止过的整个源代码,直到我检查了引用,并引用自己为了“能够”得到以前的自定义控件。 我删除了参考和完成!

所以:只需检查参考,并删除项目的自我引用。

删除您的Bin文件夹并运行应用程序。 这对我有效。 🙂

只需在debugging中closuresVisual Studio托pipe,运行该项目,然后再次运行并运行项目。

在Visual Studio中打开一个项目。

。 在项目菜单上,单击属性。

。 单击debugging选项卡。

。 清除启用Visual Studio宿主进程checkbox

对于Windows项目

Visual Studio宿主进程可以保存可执行文件指针。 要停止主机实例,请打开“ Project properties ,然后转到“ Debug选项卡。 现在取消选中“ Enable the Visual Studio hosting Process选项,然后再次选中checkbox进行debugging。

对于web项目

IIS可以保存文件指针。 重新启动IIS可以解决问题。