繁体   English   中英

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

[英]VisualStudio2010 Debugging - The process cannot access the file ... because it is being used by another process

我无法使用已发布的 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 锁定。

在 .net 上有一些对此的引用,因此这是一个已知问题。 有没有人有修补程序或有效的解决方法?

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

到 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

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

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

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

我希望这可以帮助别人。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

对我来说,解决方案是将启动项目更改为 dll(问题仅在将应用程序作为启动项目时出现在调试模式下)。 如果您的解决方案包含多个项目(它将包含一个 .dll,否则您不会遇到问题),切换到该 .dll,没有 .vshost.exe,没问题。

此外,杀死 .vshost.exe 对我不起作用,因为在再次启动后立即锁定了 .dll。

此外,请确保您的引用干净,尤其是在更复杂的项目中,并且更喜欢项目引用而不是程序集引用,等等。 我认为错误的引用(圆形和类似的)肯定会引起问题,至少我已经阅读过。

我的一篇关于这个问题的短文(和我的解决方案)

如何在解决方案中“清理”您的引用

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

它基于此处给出的解决方案但它不仅将 dll 重命名为 .locked,而是不断尝试将其重命名为 .locked1、locked2。 用10我一般一天遇到一次问题,但是ant值可以用。

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

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

干杯

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

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

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

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

删除obj文件。然后停止你的服务并重新启动。然后你就可以解决问题了

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

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

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

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

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

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

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

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

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

在 Visual Studio 中打开一个项目。

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

. 单击调试选项卡。

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

对于 Windows 项目

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

对于网络项目

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

看起来这个问题已经(终于!)在 VS2010 SP1 中得到了修复

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5&displaylang=en

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

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

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

那现在为我解决了这个问题。

从任务管理器中,终止所有.NET 主机进程

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM