업데이트 : 이 버그를 재현하는 샘플 프로젝트 는 Microsoft Connect에서 찾을 수 있습니다 . 또한 아래의 대답에 제시된 솔루션이 해당 샘플 프로젝트에서 작동하는지 테스트하고 확인했습니다 . 이 방법으로 문제가 해결되지 않으면 다른 문제가있을 수 있습니다 (별도의 질문에 속함).
이것은 이전에 스택 오버플로와 다른 장소에서 묻는 질문이지만 지금까지 찾은 제안 중 어느 것도 도움이되지 않았으므로 새로운 질문을 시도해야합니다.
시나리오 : 간단한 Windows Forms 응용 프로그램 (C #, .NET 4.0, Visual Studio 2010)이 있습니다. 여기에는 대부분의 다른 양식이 상속하는 몇 가지 기본 양식이 있으며 데이터베이스 액세스를 위해 Entity Framework (및 POCO 클래스)를 사용합니다. 공상도없고 멀티 스레딩도 없습니다.
문제 : 한동안은 괜찮 았습니다. 그런 다음 응용 프로그램을 시작하려고 할 때 Visual Studio를 빌드하지 못했습니다. "파일 '... bin \ Debug \ [ProjectName] .exe'을 (를) 삭제할 수 없습니다. '... bin \ Debug \ [ProjectName] .exe'경로에 대한 액세스가 거부되었습니다. ' 라는 경고가 표시 됩니다." 및 오류 파일을 복사 할 수 "없습니다 'OBJ \ 86 \ 디버그 \ [프로젝트 이름] .EXE'에서 '빈 \ 디버그 \ [프로젝트 이름] .EXE'. 프로세스가 파일 '빈 \ 디버그 \에 액세스 할 수 없습니다 [프로젝트 이름] .EXE "다른 프로세스에서 사용 중이기 때문입니다." (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의 버그입니까, 그렇다면 패치가 있습니까? 아니면 내가 잘못했거나 순환 참조 또는 이와 유사한 것이 있습니까? 그렇다면 어떻게 알 수 있습니까?
모든 제안은 높이 평가됩니다 :)
업데이트 : 마찬가지로 코멘트에 언급 아래, 나는 또한 실제로 그 과정 Explorer를 사용하여 검사 한 것입니다 파일을 잠그고 비주얼 스튜디오.