我无法使用Visual Studio 2010教授的发布版调试WinForms C#应用程序。
在第二次调试运行后,我收到以下错误消息。
错误9无法将文件“obj \ x86 \ Debug \ Arrowgrass Reports.exe”复制到“bin \ Debug \ Arrowgrass Reports.exe”。该进程无法访问文件'bin \ Debug \ Arrowgrass Reports.exe',因为它正由另一个进程使用。
我已尝试使用预构建脚本尝试删除此文件,但它已被Visual Studio锁定。
网上有一些引用,所以这是一个已知的问题。有没有人有修补程序或有效的解决方法?
答案 0 :(得分:29)
我发现这个问题很容易重现,对我来说修复是Richard Fors回答的变种。如果我在设计器中打开了UserControl,运行调试器,然后编辑UserControl,则后续重建将失败。如果我在运行调试器之前关闭UserControl,我永远不会收到此错误,因此我只需确保在按下F5之前关闭设计器窗口。
答案 1 :(得分: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.
来源: http://msdn.microsoft.com/en-us/library/ms185330(v=vs.100).aspx
答案 2 :(得分:21)
您可以尝试终止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"
答案 3 :(得分:4)
禁用Windows搜索并没有解决我的问题。但是,禁用防病毒软件(我们的防病毒软件是Symantec Endpoint Protection 11)
因此,我能够通过更改项目中的调试设置将工作文件夹指向C:驱动器上的路径,然后从防病毒自动保护扫描设置中除了该路径,从而为自己解决此问题。
我希望这有助于某人。
答案 4 :(得分:4)
我在一个类似的问题中发布了这个答案,但我想也会在这里说:
好吧......这可能听起来很疯狂。
在过去的几年里,我在VS2010中遇到过这个问题。这里提到的解决方法对我有用,但很多时候我忘了先关闭所有表单/用户控件。
我发现只是通过以下方式查看打开的文件:
Computer Management (compmgmt.msc)->Shared Folders->Open Files
将“释放”任何被锁定的文件。很奇怪,但它对我有用!
答案 5 :(得分:2)
在我的情况下,我执行了项目属性 - >安全选项卡 - >取消选中Click-Once安全设置(如果已选中)。它对我有用。在我的项目中,它显示了在我的C#项目中使用的C ++ DLL的错误。
答案 6 :(得分:1)
我不能'写入评论,因为不是在50分,但对我来说,我在ESET Enpoint Security ver 5中排除了我的项目文件夹。似乎它阻止/阻塞了一些文件。我的错误没有说明哪个exe或文件正在使用,所以花了很长时间才终于得到JoeC所说的关于Antivirus并试了一下。似乎现在正在工作(Visual Studio 2010 SP1)
答案 7 :(得分:1)
最近更改了用户控件,解决了我的方案中的问题。希望这会帮助那里的人。
答案 8 :(得分:1)
检查任务管理器以查找指定的进程并显式结束进程。这个解决方案对我有用。
答案 9 :(得分:1)
我在开发Windows服务时遇到了这个问题。我发现它在服务运行时发生。因此,您只需要停止服务(来自services.msc控制台),您就可以开始了!
希望这会有所帮助。 蒂贾尼。
答案 10 :(得分:1)
得到错误("当我从两个大的源代码修改(Visual Studio 2010 C#Express with SP1)解决方案时,进程无法访问该文件...因为它正被另一个进程使用#34;)文件,每个文件大约500行)一个引用另一个的项目,大量(6)小项目,其中有很多项目引用其他项目。
引用是dll-和exe文件(它们的Debug版本),而不是项目,即使项目在同一个解决方案中。
然后我了解到引用应该是项目,而不是文件,以使F12正常工作。所以我修改了引用。这使得F12工作(跳转到源文件而不是一些自动生成的接口描述),同时"无法访问文件"构建过程中的错误消失了。
我只得到"无法访问文件"执行发布版本时出错。引用的是exe / dll的Debug版本。我怀疑这种混合是触发VS中的错误的原因。
答案 11 :(得分:1)
所描述的条件也可能由违规的DLL或EXE引用本身引起;在这种情况下,前面描述的Process Explorer测试永远不会返回匹配(例如,它没有运行)。这种意想不到的情况似乎是在VS2010(以及可能以前的所有版本)中的一些操作序列中引起的,这些操作在后台隐藏地添加了引用。其具体原因尚未被追踪(或我已知的解决)。要检查并解决此错误,只需确保违规DLL或EXE未列为对自身的引用。
答案 12 :(得分:0)
我的问题在创建自定义控件后开始,然后将其拖放到工具箱面板中,以便在设计表单中使用它。首先出现了一个警告,说自定义控件源文件(.cs)和可执行项目(.exe)之间存在冗余。在执行/调试时出现错误:无法访问(.exe)因为它正被使用(并且它是真的)。
从字面上删除了关于自定义控件的完整源代码,最后一个问题从未停止过,直到我检查了引用并且引用自身以便“能够”获得以前的自定义控件。我删除了引用并完成了!!
所以:只需检查引用并删除对项目的自引用。
答案 13 :(得分:0)
当项目在远程共享上时,我遇到了这个错误(例如,如果您的$ env:homepath被IT部门有效地重定向到网络共享)。确保您的项目驻留在本地驱动器上。
答案 14 :(得分:0)
删除Bin文件夹并运行该应用程序。 这对我有用。 :)
答案 15 :(得分:0)
对我有用的是删除"只读" bin文件夹上的状态。一旦我这样做,它一直有效。
答案 16 :(得分:0)
如果您正在使用使用C DLL引用的C#项目,则可以通过选中“允许不安全代码”复选框来消除错误。我知道我在C#项目中没有使用过指针,但我在C#中使用了一些按位运算符。可能是这些类似C的功能将其变形为“不安全”代码。
答案 17 :(得分:0)
只需在调试中关闭Visual Studio主机,运行项目并再次重新启动它并运行项目。
在Visual Studio中打开一个项目。
。在项目菜单上,单击属性。
。单击“调试”选项卡。
。清除“启用Visual Studio宿主过程”复选框
答案 18 :(得分:0)
对我来说,最好的解决方案是将我的项目文件移出My Documents(位于IT部门管理的服务器上),并在我的C盘上本地找到它们。还可以工作:取消选中"启用Visual Studio托管流程"复选框,正如其他人所说。
答案 19 :(得分:0)
Visual Studio托管进程可以保存可执行文件指针。要停止主机实例,请打开Project properties
,然后转到Debug
标签。现在取消选中Enable the Visual Studio hosting Process
选项,然后再次选中复选框进行调试。
IIS可以保存文件指针。重新启动IIS可以解决问题。
答案 20 :(得分:0)
删除obj文件。然后停止服务并重新启动。然后您可以解决问题
答案 21 :(得分:0)
尝试在debug或release文件夹中删除.exe文件(无论你在做什么) Windows将提示进程X已打开此进程,您无法将其删除 之后转到任务管理器并在详细信息选项卡中结束任务X进程
答案 22 :(得分:0)
我的问题是Outlook 2010(outlook.exe)使用与IIS Express的ASP.NET MVC项目相同的端口。
解决方案:关闭outlook.exe,运行您的解决方案并再次打开Outlook(以便它使用另一个端口)。
希望这有助于某人,因为我收到了与本主题中描述的相同的错误消息。
答案 23 :(得分:0)
停止IIS服务并尝试再次构建它,或者如果您能够重新启动电脑,请尝试一下。两种方式都为我工作。
干杯
答案 24 :(得分:0)
只需复制整个项目并从新副本运行项目....它将正常工作。 但是你必须以某种方式结束调试过程才能删除旧项目。
答案 25 :(得分:0)
将以下内容添加到共享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我通常每天遇到一次问题,但可以使用蚂蚁值。
答案 26 :(得分:0)
对我来说,解决方案是将启动项目更改为dll(当应用程序作为启动项目时,问题仅发生在调试模式中)。如果您的解决方案包含多个项目(并且它将包含.dll,否则您将无法解决问题),切换到.dll,没有.vshost.exe,没问题。
另外,杀死.vshost.exe对我来说不起作用,因为在重新启动之后,它已经锁定了.dll。
此外,请确保您的引用清晰,特别是在更复杂的项目中,并且还更喜欢对程序集引用的项目引用,等等。我认为不好的引用(循环和类似的)必然会引起问题,至少我已经读过了。
答案 27 :(得分:0)
我想我刚刚找到了罪魁祸首和解决方案。
转到服务并停止&禁用“Windows搜索”服务。
现在我解决了这个问题。
答案 28 :(得分:0)
请尝试卸载Windows Live SYNC。它还会发生吗?
答案 29 :(得分:0)
看起来这个问题(最终!)已经在VS2010 SP1中修复了