Unable to copy a file from obj\Debug to bin\Debug

@Udpate: Since the time I was first posting this 'answer', I tend to another explanation to the problem. The issue since than happened more and more often outside of Visual Studio also - while trying to copy an .exe file from one folder to another. While in the first place Windows did not allow to copy(!) an .exe file (it was first asking me for administrative rights but refused to copy it afterwards anyway) it still showed up in the explorer. But after a while - without any further action taken, it disappeared magically. Just like the problem in the question always seems to solve itself after a while. So i assume, the problem is more related to a delayed deletion of the project output file and less a buggy VS. I apologize for any unjustified suspicion. :|

This gives the search for a solution a complete different direction, I guess. Did find that link and will update on any progress:

https://superuser.com/questions/234569/windows-7-delayed-file-delete

========================================================================

This is a known bug in VS. I discovered it very often - mostly in VS2010 (with/without SP1). Several "solutions" are recommended. Some of them, which kind of helped for me:

  1. Delete the .suo file in your project dir. Eventually need to create your whole solution from scratch.
  2. Close any Windows Form Designers may remain open.
  3. Use a prebuild script, which deletes the target from the output dir.
  4. Disable the VS hosting process.

None of these really fixes the bug. But it may brings the VS back to a usable state - until a true solution is provided by MS (if ever will).

http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/cea5e4b2-5b33-453c-bffb-8da9f1a1fa4a

http://social.msdn.microsoft.com/Forums/en/vbide/thread/cd12f3c7-de96-4353-adce-23975e30933f


This should work.

Go to your project properties. Inside Build Events, under Pre-build event command line, add these two lines of code:

if exist "$(TargetPath).locked" del "$(TargetPath).locked"
if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"