Update: 可以找到重现此错误的示例项目here at Microsoft Connect . 我还测试并验证了the accepted answer below中给出的解决方案适用于该示例项目 . 如果此解决方案不适合您,您可能遇到了另一个问题(属于一个单独的问题) .
这是一个之前提出的问题,无论是Stack Overflow还是其他地方,但我发现的这些建议都没有帮助我,所以我只想尝试一个新问题 .
场景:我有一个简单的Windows窗体应用程序(C#,.NET 4.0,Visual Studio 2010) . 它有一些大多数其他形式继承的基本形式,它使用Entity Framework(和POCO类)进行数据库访问 . 没什么好看的,没有多线程或任何东西 .
问题:一切都很好 . 然后,当我即将启动应用程序时,Visual Studio无法构建 . 我收到了警告"Unable to delete file '...bin\Debug[ProjectName].exe'. Access to the path '...bin\Debug[ProjectName].exe' is denied."和错误"Unable to copy file 'obj\x86\Debug[ProjectName].exe' to 'bin\Debug[ProjectName].exe'. The process cannot access the file 'bin\Debug[ProjectName].exe' because it is being used by another process."(我在运行Rebuild时得到警告和错误,但只有运行Build时出错 - 不认为这是相关的吗?)
我完全理解警告和错误消息的内容:Visual Studio显然试图覆盖exe文件,同时由于某种原因它同时锁定它 . 但是,这并没有帮助我找到解决问题的方法......我发现唯一有用的工作就是关闭Visual Studio并重新启动它 . 然后构建和启动工作,直到我在某些表单中进行更改,然后我再次遇到相同的问题并且必须重新启动...非常令人沮丧!
正如我上面提到的,这似乎是一个已知的问题,因此有很多建议的解决方案 . 我将列出我在这里尝试过的内容,以便人们知道要跳过的内容:
-
创建一个新的干净解决方案,只需从旧解决方案中复制文件 .
-
将以下内容添加到项目的预构建事件中:
if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if not exist "$(TargetPath).locked" if exist "$(TargetPath)" move "$(TargetPath)" "$(TargetPath).locked"
- 将以下内容添加到项目属性(.csproj文件):
<GenerateResourceNeverLockTypeAssemblies>true</GenerateResourceNeverLockTypeAssemblies>
然而,他们都没有为我工作,所以你可能会明白为什么我开始有点沮丧 . 我不知道在哪里可以看,所以我希望有人能给我一些东西!这是VS中的一个错误,如果是这样的补丁?或者我做错了什么,我有一个循环引用或类似的,如果是这样我怎么能找到?
任何建议都非常感谢:)
Update: 如下面的评论所述,我还使用Process Explorer检查了它实际上是锁定文件的Visual Studio .
30 回答
这通常是由Avast引起的 .
我通常可以在Release中运行我的项目,但是在调试中运行它会经常失败 .
我只是为我的项目文件夹添加一个排除项,问题似乎消失了 . 我认为这也可能是其他防病毒软件引起的 .
如果以上都不起作用,并且您正在开发控制台应用程序:
尝试在Program.cs中输入任何字符,然后将其删除 . 我不知道为什么会这样,但似乎每次都解决了“无法复制”的问题 .
我尝试了几个你提供的解决方案,但偶尔我仍会收到此错误 . 我很肯定我的进程没有运行,当我尝试用Internet Explorer删除可执行文件时,它会从文件列表中删除,但是然后我按下F5并瞧,文件又回来了 . 它根本没有被删除 .
但是如果我通过TotalCommander删除文件,exe文件实际上已被删除,我可以成功构建项目 .
我使用Windows 7 x64和总指挥官7.56a 32位 .
我找到了一个简单的解决方案,只需为项目文件夹和子文件夹禁用Windows索引服务
使用Visual Studio我永远无法想出一个简单的项目来重现错误 .
我的解决方案是禁用Visual Studio Hosting进程 .
对于那些感兴趣的人,我附上了违规句柄的句柄跟踪:
没有其他答案对我有用,但关闭Visual Studio中所有打开的选项卡似乎已经解决了问题 .
My solution has nothing to do with versions, processes being locked, restarting, or deleting files.
问题实际上是由于构建失败,并没有给出正确的错误 . 实际问题是设计缺陷:
在将"a"的范围更改为函数外部,或者在
Task.Factory.StartNew();
之后不使用"a"之后,我能够再次构建 .在Windows7x64 sp1上使用VS2012 Update 4时发生这种情况 .
错误信息:
Disable antivirus and try. 我也遇到了这个问题...但在我的情况下,当我禁用防病毒软件时,防病毒软件阻止了我的应用程序 .
禁用"Enable the Visual Studio hosting process"
当我遇到类似的问题时,唯一似乎有效的是:
右键单击项目,转到“设置”,确保“调试”和“发布”构建都针对相同的设置,或者具有应用程序尝试加载或保存的设置 .
删除C:\ Users(YourUserAccount)\ AppData \ Local(YourAppName)文件夹 .
确保没有文件我在那里被认为"Blocked" . 右键单击我项目的包含文件,我意识到一个图标实际上被阻止并被认为是坏的,因为它是从互联网上下载的 . 我必须单击“取消阻止”按钮(例如,检查出来:http://devierkoeden.com/Images/Articles/Dynamicweb/CustomModules/Part1/BlockedFiles.png - "This file came from another computer and might be blocked to help protect this computer.") .
我遇到了同样的错误 .
我通过删除所有依赖项目/库的 bin 文件夹的所有内容来解决问题 .
此错误主要是由于版本更改而发生的 .
由于我还没有得到关于这个问题的任何反馈,我想我只是分享最终成为我的解决方案:
正如Barry在对原始帖子的评论中所建议的那样,手动将'...bin\Debug[ProjectName].exe'重命名为其他内容(例如'[ProjectName]1.exe')是一种解决方法(我不是一个很好的解决方案,但它已经完成了几次,它几乎完成了成为例程),并且至少比重启Visual Studio更快,这是我在开始时所做的 .
如果有人想知道,我还可以补充一点,我只是半随机地看到这个问题 . 它通常发生在我对表单的设计模式进行一些更改之后(但并非总是如此) . 如果我只改变业务逻辑代码或非视觉相关代码(但有时它会......),通常不会发生这种情况 . 确实令人沮丧,但至少我有一个适合我的黑客 - 让我们只希望我的下一个项目也不会面临这个问题......
@Barry:如果您想获得评论,请随时将其作为答案发布,我一定会接受它:)
先做简单的事 .
检查解决方案的某些部分是否未被正在运行的进程锁定 .
例如,我在我的Windows服务上运行“InstallUtil”(我通常从控制台进行单元测试) .
这将我的一些dll锁定在Windows服务项目的bin文件夹中 . 当我进行重建时,我在这个问题上得到了例外 .
我停止了Windows服务,重建并成功了 .
在执行此问题中的任何预先步骤之前,请检查应用程序的Windows任务管理器 .
所以,当你听到脚步声时,想想马不是斑马! (来自医学生朋友)
我在这里的答案中尝试了所有其他建议,但都没有奏效 . 最后,我使用Process Monitor发现VS2010无法构建的.exe被系统进程锁定(PID = 4) . 搜索SO以查找涉及此问题的情况会产生this答案 .
总结:如果您禁用了Application Experience服务(就像我一样),那么重新启用并启动它 . 两年的恶化已经结束 .
我也有一个与此非常相似的问题,发现我的理由是我将bin \ debug文件夹作为VMware下的共享文件夹和VM guest虚拟机下的VMware,Explorer,或者甚至是反病毒来宾下的程序(虽然我认为我没有安装过)是持有文件的句柄 .
在我从bin目录中删除只读标志后,这对我有帮助 . http://www.thewindowsclub.com/error-0x80080015-windows-defender-activation-requires-display-name
重命名.exe和.pub文件对我有用,但真的很乏味 . 我还面临着在调试会话期间无法进行编辑的问题 . 最后,我进入了高级安全设置页面,按照:
https://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28%22VS.ERR.DEBUG_IN_ZONE_NO_HOSTPROC%3a11310%22%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true
我取消选择然后重新选择“启用ClickOnce安全设置”复选框 . 现在几天都没有问题......
对于使用WCF的Windows服务,我结束了WFC主机进程并且它工作正常 . 当这种情况发生时我讨厌它,有时会随机发生 .
对我来说,这是由于在目标文件夹(
C:\users\username\source\repos\project\project\bin\debug\app.publish
)中打开命令提示符引起的 .不确定为什么DEBUGGING需要访问发布文件夹,但关闭命令窗口解决了我的问题 .
当我遇到这个问题时,事实是我正在尝试构建的项目被设置为解决方案中的启动项目,使得obj文件夹中的.exe被锁定(它也出现在您的任务管理器中)右键单击解决方案中的另一个项目,然后选择set startup project . 这将释放锁,将其从任务管理器中删除,并让你 Build .
IF YOUR PROBLEM IS NOT SOLVED YET:
Visual Studio的错误是:
“该进程无法访问文件'bin \ Debug ** app.exe **',因为它正由另一个进程使用 . ”
因此,转到Windows的任务管理器(Ctrl Shift Esc),找到您的应用程序名称并强制它由Endprocces关闭 .
重新启动IIS-可能是附加到调试器的进程
我建议下载
Process Explorer
以确切了解锁定文件的进程 . 它可以在以下位置找到:http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx
这听起来很愚蠢,但我尝试了所有这些解决方案,在Windows 7上运行VS2010 . 除了重命名和构建之外,它们都没有工作,至少可以说非常繁琐 . 最终,我找到了罪魁祸首,我发现很难相信 . 但我在AssemblyInfo.cs中使用以下代码...
这很常见,但出于某种原因,将版本更改为2.0.0.0会使事情再次发挥作用 . 我不知道它是否是Windows 7特定的东西(我只使用它3-4周),或者它是随机的,或者是什么,但它为我修复了它 . 我猜测VS正在处理它生成的每个文件,所以它会知道如何增加内容吗?我真的不确定,从来没有见过这种情况 . 但如果那里的其他人也把头发拉出来,试一试 .
这已在Connect,Microsoft的社区错误报告网站上多次提交 . 仅供参考,我相信这个bug自2003年以来一直困扰着Visual Studio,并且每次都在RTM之后修复 . :(其中一个参考如下:
https://connect.microsoft.com/VisualStudio/feedback/details/568672/handles-to-project-dlls-are-not-released-when-compiling?wa=wsignin1.0
我有同样的问题 . 它说无法从bin \ debug复制到obj .....
当我构建web项目时,我发现我的dll都在bin文件夹而不是在bin \ debug中 . 在发布期间vs正在bin \ debug中查找文件 . 所以我在编辑器中打开了web项目文件并查找了bin \ debug的实例,我发现所有的dll都被提到bin \ debug \ mylibrary.dll . 我从路径中删除了所有\ debug并再次发布 . 这次vs能够在bin文件夹中找到所有dll并发布成功 .
我不知道如何在Web项目文件中更改此路径 .
我花了5个多小时调试这个,最后找到了我自己的解决方案 .
这是 right answer .
Here's another possibility:
在vs2012 / win7中收到此错误后,我去尝试删除bin目录中的文件,并且资源管理器指示该文件正由XAML UI Designer使用 .
我关闭了我在VS中打开的所有选项卡,关闭了VS,然后确保在taskmanager中杀死所有MSBuild进程 . 最后,重新启动VS后,我能够构建解决方案 .
and another possible cause:
我注意到了这个问题的另一个可能原因 . 在进行一些代码重构,将项目移入和移出解决方案后,我的项目引用不再按预期引用解决方案中的项目 .
这个误导的视觉工作室认为它可以同时构建一些项目,从而创建文件锁 .
编辑:我甚至最近在VS2012上发生过这种情况,并且一旦我将构建顺序设置为正确的依赖关系,它确实修复了它,杀死VS运行的任何msbuild进程,然后重新启动VS.我确定杀死msbuild进程,但关闭VS也应该杀死它们 .
我通常做的是重构一个项目,使它依赖于解决方案中的另一个项目,它在上一次构建时没有引用 . 这有时似乎让VS感到困惑,并且它不会更新构建顺序 .
要检查构建顺序:在解决方案资源管理器中右键单击解决方案,然后选择“项目构建顺序...”并验证是否为每个项目正确记录了依赖项 .
我在VS2008(Windows 7 x32)上使用WPF项目时遇到了同样的问题(MSB3021) . 如果我尝试在上次运行后重新运行应用程序太快,则会出现此问题 . 几分钟后exe文件自己解锁,我可以重新运行应用程序 . 但是这么长时间的停顿让我感到愤怒 . The only thing that really helped me was running VS as Administrator.
我知道这是一个非常古老的问题,但我最近在VS 2012中经历了“无法从obj复制到bin”错误 . 每次我尝试重建某个项目时,都收到了消息 . 唯一的解决方案是在每次重建之前进行清理 .
经过大量调查后,事实证明我的一个文件中有一个不完整的pragma警告语句,这个语句并没有阻止编译成功,但却让VS在某种程度上混淆了文件是否被锁定 .
就我而言,我在文件的顶部有以下内容:
而已 . 我想我曾经试图做一些事情并且分心并且从未完成过程,但关于那条特定线路的VS警告在洗牌中丢失了 . 最后我注意到了警告,删除了线,并且从那时起每次都重建工作 .
我发现VS2013我经常收到这个错误 . 似乎运行良好的东西是在尝试运行应用程序之前执行重建解决方案 . 我发现执行CLEAN有时会起作用,但Rebuild Solution似乎更加一致 .