VisualStudio2010调试 - 进程无法访问该文件...因为它正被另一个进程使用

Ric*_*rss 49 debugging visual-studio-2010 visual-studio

我无法使用Visual Studio 2010教授的发布版本调试WinForms C#应用程序.

第二次调试运行后,我收到以下错误消息.

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

我已经尝试了一个预构建脚本来尝试删除此文件,但它被Visual Studio锁定.

网上有一些引用,所以这是一个已知的问题.有没有人有修补程序或有效的解决方法?

小智 29

我发现这个问题很容易重现,对我来说修复是Richard Fors回答的一个变种.如果我在设计器中打开了UserControl,运行调试器,然后编辑UserControl,则后续重建将失败.如果我在运行调试器之前关闭UserControl,我永远不会收到此错误,因此我只需确保在按下F5之前关闭设计器窗口.


Ale*_* S. 27

截至2012年10月,我仍然有这个问题,所以VS 2010 SP1没有解决问题.我所做的,并且始终如一地工作,正在禁用项目中的托管过程.

要禁用托管过程:

.  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.
Run Code Online (Sandbox Code Playgroud)

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

  • 这是我在这里列出的最不喜欢的解决方案,但它是唯一适合我的解决方案.我会注意到,在进行更改后,它并没有自动终止挂起的主机进程.我仍然需要再次重启Visual Studio才能使用它. (4认同)

Dir*_*mar 21

您可以尝试终止vshost.exe进程:

taskkill /F /IM "Arrowgrass Reports.vshosts.exe"
Run Code Online (Sandbox Code Playgroud)

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

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked" 
Run Code Online (Sandbox Code Playgroud)

  • 为了防止有人对此感兴趣,我注意到只有在使用用户定义的控件时才会出现问题.看起来Visual Studio本身就是另一个进程,因为它正在渲染控件.我发现只要这个控件不在屏幕上,我就没有得到错误. (3认同)
  • @Tomas Pajonk:问题的原因很可能是错误信息所说明的事实; 您的目标正被另一个进程使用.要找出哪个进程,您可以使用Sysinternal的Process Explorer; 按Ctrl + F并搜索"Arrowgrass Reports.exe" (2认同)