【问题标题】:VisualStudio2010 Debugging - The process cannot access the file ... because it is being used by another processVisualStudio2010 调试 - 进程无法访问文件...因为它正被另一个进程使用
【发布时间】:2011-02-11 00:26:55
【问题描述】:

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

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

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

我已尝试使用预构建脚本尝试删除此文件,但它已被 Visual Studio 锁定。

网上有一些关于这个的参考,所以这是一个已知的问题。有没有人有修补程序或有效的解决方法?

【问题讨论】:

    标签: visual-studio-2010 visual-studio debugging


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这是我最不喜欢的解决方案,但它是唯一对我有用的解决方案。我会注意到,在进行更改后,它并没有自动终止挂起的托管进程。我仍然需要再次重新启动 Visual Studio 才能使其正常工作。
      • 仍然,它对我不起作用。我也重启了vs。
      • 这对我有用,没有其他方法,我尝试了我能找到的一切。
      【解决方案3】:

      你可以尝试杀死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" 
      

      【讨论】:

      • 该链接不会尝试破译问题的原因,因此它是否有效。不是我的情况。
      • @Tomas Pajonk:问题的原因很可能是错误消息中所述的事实;您的目标正在被另一个进程使用。要找出哪个进程,您可以使用 Sysinternal 的 Process Explorer;按 Ctrl+F 并搜索“Arrowgrass Reports.exe”
      • 以防万一还有人对此感兴趣,我注意到只有在使用用户定义的控件时才会出现问题。看起来 Visual Studio 本身就是另一个进程,因为它正在呈现控件。我发现只要这个控件不在屏幕上,我就没有报错。
      • 该链接的方法主要解决了我的“在发布模式下多次构建”的问题。导致的唯一限制是 Visual Studio 无法再运行新建的可执行文件 - 我必须在文件系统中找到该文件并手动启动它。不过,这个限制似乎只存在于发布模式下。
      • 链接已失效。可惜下线之前这里没有包含关键点。
      【解决方案4】:

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

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

      我希望这对某人有所帮助。

      【讨论】:

        【解决方案5】:

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

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

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

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

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

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

        【讨论】:

        • 多么奇怪...设法复制并且它有效...现在... :-)
        【解决方案6】:

        就我而言,我做了项目属性-->安全选项卡-->取消选中 Click-Once 安全设置(如果已选中)。它对我有用。在我的项目中,我的 C# 项目中使用的 C++ dll 显示此错误。

        【讨论】:

          【解决方案7】:

          所描述的情况也可能是由有问题的 DLL 或 EXE 引用自身引起的;在这种情况下,前面描述的 Process Explorer 测试永远不会返回匹配项(例如,它没有运行)。这种意外情况似乎是在 VS2010(以及可能所有以前的版本)中的某些操作序列期间引起的,这些操作在幕后悄悄地添加了引用。对此的具体原因尚未追查(或据我所知已解决)。要检查并解决此错误,只需确保有问题的 DLL 或 EXE 未作为对其自身的引用列出。

          【讨论】:

          • 你的意思是在项目的引用中吗?您在哪里看到这些信息?
          【解决方案8】:

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

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

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

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

          【讨论】:

            【解决方案9】:

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

            希望这会有所帮助。 提贾尼。

            【讨论】:

              【解决方案10】:

              检查指定进程的任务管理器并明确结束进程。这个解决方案对我有用。

              【讨论】:

                【解决方案11】:

                我不能写评论,因为不是 50 分,但对我来说,我在 ESET Enpoint Security 版本 5 中排除了我的项目文件夹。似乎它阻止/占用了一些文件。我的错误没有说明正在使用哪个 exe 或文件,因此花了很长时间才最终了解 JoeC 关于防病毒软件的说法并进行了尝试。似乎现在可以工作(Visual Studio 2010 SP1)

                【讨论】:

                  【解决方案12】:

                  关闭最近更改的用户控件解决了我的场景中的问题。希望这会帮助那里的人。

                  【讨论】:

                    【解决方案13】:

                    【讨论】:

                    • 我今天用 VS 10.0.40219.1 SP1Rel 得到它:(
                    • 与 CmdrTallen 相同 - SP1 并未全面解决该问题。也许它解决了它的一些根本原因?但不适合我。
                    • 在设计用户控件时,我仍然经常遇到这个问题,而且我使用的是 VS 2010 SP1。我什至不必在调试器中运行应用程序。当我在设计器中打开用户控件时,一个构建,然后是第二个连续构建会重现该问题。
                    • 我今天用 VS2015 搞定了。不得不关闭托管。我以前从未发生过,包括在我一直运行的这个项目中。即使重新启动也无法修复它。
                    【解决方案14】:

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

                    【讨论】:

                      【解决方案15】:

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

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

                      现在解决了我的问题。

                      【讨论】:

                        【解决方案16】:

                        对我来说,解决方案是将启动项目更改为 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

                        【讨论】:

                          【解决方案17】:

                          将以下内容添加到共享 dll 的 Pre-build 事件中对我有用:

                          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 值。

                          【讨论】:

                            【解决方案18】:

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

                            【讨论】:

                              【解决方案19】:

                              停止 IIS 服务并尝试重新构建它,或者如果您有能力重新启动您的电脑,请尝试一下。两种方式都为我工作。

                              干杯

                              【讨论】:

                                【解决方案20】:

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

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

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

                                【讨论】:

                                  【解决方案21】:

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

                                  【讨论】:

                                    【解决方案22】:

                                    删除obj文件。然后停止服务并重新启动。然后你可能会解决问题

                                    【讨论】:

                                      【解决方案23】:

                                      对我来说最好的解决方案是将我的项目文件从我的文档中移出 - 它位于 IT 部门管理的服务器上 - 并将它们本地定位在我的 C 驱动器上。同样有效:如其他人所述,取消选中“启用 Visual Studio 托管进程”复选框。

                                      【讨论】:

                                        【解决方案24】:

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

                                        【讨论】:

                                          【解决方案25】:

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

                                          【讨论】:

                                            【解决方案26】:

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

                                            【讨论】:

                                              【解决方案27】:

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

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

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

                                              【讨论】:

                                                【解决方案28】:

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

                                                【讨论】:

                                                  【解决方案29】:

                                                  只需在调试中关闭 Visual Studio 托管,运行项目,然后再次重新启动并运行项目。

                                                  在 Visual Studio 中打开一个项目。

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

                                                  。单击“调试”选项卡。

                                                  。清除启用 Visual Studio 托管进程复选框

                                                  【讨论】:

                                                    【解决方案30】:

                                                    对于 Windows 项目

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

                                                    对于网络项目

                                                    IIS 可以保存文件指针。重启IIS即可解决。

                                                    【讨论】:

                                                      猜你喜欢
                                                      • 1970-01-01
                                                      • 2011-07-05
                                                      • 2015-12-07
                                                      • 2011-04-17
                                                      • 1970-01-01
                                                      • 2012-06-17
                                                      • 1970-01-01
                                                      • 1970-01-01
                                                      相关资源
                                                      最近更新 更多