首页 文章

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

提问于
浏览
49

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

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

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

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

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

30 回答

  • 0
  • 2

    请尝试卸载Windows Live SYNC . 它还会发生吗?

  • 0

    我想我刚刚找到了罪魁祸首和解决方案 .

    转到服务并停止并禁用“Windows搜索”服务 .

    这解决了我现在的问题 .

  • 1

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

  • 1

    截至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.
    

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

  • 0

    您可以尝试终止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"
    
  • 0

    禁用Windows搜索并没有解决我的问题 . 但是禁用防病毒软件(我们的防病毒软件是Symantec Endpoint Protection 11)

    因此,我能够通过更改项目中的调试设置将工作文件夹指向C:驱动器上的路径,然后从防病毒自动保护扫描设置中除了该路径,从而为自己解决此问题 .

    我希望这可以帮助别人 .

  • 0

    我在一个类似的问题中发布了这个答案,但我想在这里也说出来:

    好吧......这可能听起来很疯狂 .

    在过去的几年里,我在VS2010中遇到过这个问题 . 这里提到的解决方法对我有用,但很多时候我忘记先关闭所有表单/用户控件 .

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

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

    将“释放”任何被锁定的文件 . 很奇怪,但它对我有用!

  • 27

    在我的例子中,我做了Project Properties - > Security选项卡 - >取消选中Click-Once安全设置(如果已选中) . 它对我有用 . 在我的项目中,它显示了在我的C#项目中使用的C dll的这个错误 .

  • 0

    描述的条件也可能由违规的DLL或EXE引用本身引起;在这种情况下,前面描述的Process Explorer测试永远不会返回匹配(例如,它没有运行) . 这种意想不到的情况似乎是在VS2010(以及可能以前的所有版本)中的一些操作序列中引起的,这些操作在后台隐藏地添加了引用 . 其具体原因尚未被追踪(或我已知的解决) . 要检查并解决此错误,只需确保违规DLL或EXE未列为对自身的引用 .

  • 1

    当我从两个大的(10个源文件,每个文件大约500行)修改(Visual Studio 2010 C#Express with SP1)解决方案时出现错误(“进程无法访问文件...因为它正由另一个进程使用”)一个引用另一个的项目,大量(6)小项目,其中有许多项目引用其他项目 .

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

    然后我了解到引用应该是项目,而不是文件,以使F12正常工作 . 所以我修改了引用 . 这使得F12工作(跳转到源文件而不是一些自动生成的接口描述),同时在构建期间“无法访问文件”错误消失 .

    在进行发布版本时,我只得到“无法访问文件”错误 . 引用的是exe / dll的Debug版本 . 我怀疑这种混合是触发VS中的错误的原因 .

  • 4

    我在开发Windows服务时遇到了这个问题 . 我发现它在服务运行时发生 . 因此,您只需要停止服务(来自services.msc控制台),您就可以开始了!

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

  • 0

    检查任务管理器以查找指定的进程并显式结束该进程 . 这个解决方案对我有用 .

  • 0

    我不能写评论,因为不是在50分,但对我来说,我在ESET Enpoint Security ver 5中排除了我的项目文件夹 . 好像它阻止/占用了一些文件 . 我的错误没有说明哪个exe或文件正在使用,所以花了很长时间才终于得到JoeC所说的关于Antivirus并试了一下 . 似乎现在正在工作(Visual Studio 2010 SP1)

  • 0

    关闭最近更改 User Controls 解决了我的方案中的问题 . 希望这会帮助那里的人 .

  • 0

    对我来说,解决方案是将启动项目更改为dll(当应用程序作为启动项目时,问题仅发生在调试模式中) . 如果您的解决方案包含多个项目(并且它将包含.dll,否则您将无法解决问题),切换到.dll,没有.vshost.exe,没问题 .

    另外,杀死.vshost.exe对我来说不起作用,因为在重新启动之后,它立即锁定了.dll .

    此外,请确保您的引用清洁,尤其是在更复杂的项目中,并且还更喜欢对程序集引用的项目引用,等等 . 我认为不好的引用(循环和类似)必然会引起问题,至少我已经读过了 .

    A short article by me on this problem (and my solution)

    How to "clean up" your references in a solution

  • 1

    将以下内容添加到共享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)=
    

    它基于here给出的解决方案,但不是仅仅将dll重命名为.locked,而是继续尝试将其重命名为.locked1,locked2 . 使用10我通常每天遇到一次问题,但可以使用 Ant 值 .

  • 0

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

  • 21

    停止IIS服务并尝试再次构建它,或者如果您可以重新启动电脑,请尝试一下 . 两种方式都为我工作 .

    干杯

  • 29

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

    解决方案:关闭outlook.exe,运行您的解决方案并再次打开Outlook(以便它使用另一个端口) .

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

  • 0

    尝试删除调试或发布文件夹中的.exe文件(无论你在做什么)Windows都会提示进程X已经打开了这个,你不能删除它后再去任务管理器和详细信息选项卡结束任务X进程

  • 0

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

  • 0

    对我来说最好的解决方案是将我的项目文件移出My Documents(位于IT部门管理的服务器上),并在我的C盘上本地找到它们 . 还可以工作:取消选中“启用Visual Studio托管过程”复选框,如其他人所述 .

  • 0

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

  • 0

    对我有用的是删除bin文件夹中的“只读”状态 . 一旦我这样做,它一直有效 .

  • 1

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

  • 0

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

    从字面上删除了关于自定义控件和最后一个问题的完整源代码从未停止,直到我检查了引用,它是引用自身以便“能够”获得以前的自定义控件 . 我删除了参考并完成了!!

    所以:只需检查引用并删除对项目的自引用 .

  • 0

    删除Bin文件夹并运行该应用程序 . 这对我有用 . :)

  • 4

    只需在调试中关闭Visual Studio主机,运行项目并再次重新启动它并运行项目 .

    在Visual Studio中打开一个项目 .

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

    . 单击“调试”选项卡 .

    . 清除“启用Visual Studio宿主进程”复选框

  • 1

    对于Windows项目

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

    对于Web项目

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

相关问题