[C#] 빌드하는 동안 Visual Studio“복사 할 수 없음”…

VS2012 C # 프로젝트를 빌드하는 동안이 오류가 계속 발생합니다.

Error   41  Could not copy "obj\Debug\WeinGartner.WeinCad.exe" to
 "bin\Debug\WeinGartner.WeinCad.exe". 
 Exceeded retry count of 10. Failed.    


Error   42  Unable to copy file "obj\Debug\WeinGartner.WeinCad.exe" to
"bin\Debug\WeinGartner.WeinCad.exe". The process cannot access the file
'bin\Debug\WeinGartner.WeinCad.exe' because it is being used by another 
process.    

이제 나는 프로세스를 죽이는 것을 알아 냈습니다.

Weingartner.WeinCad.vhost.exe

작동하지만 (때로는) 이것은 내 신경에 걸리고 있습니다. 이 일을 전혀 막을 방법이 있습니까?

내 디버거 설정은

여기에 이미지 설명을 입력하십시오
여기에 이미지 설명을 입력하십시오



답변

Visual Studio 2013에서 비슷한 오류 메시지가 발생했습니다.

대부분 예외로 인해 디버그 프로세스가 중지되었을 때이 상황이 발생했습니다.

clean + build가이 문제를 해결하지 못하면 다음을 수행하여 성공했습니다.

  • Visual Studio 닫기
  • binobj폴더 삭제
  • Visual Studio를 다시 엽니 다.

이 “버그”는 Visual Studio 2003부터 존재했습니다.

마지막으로 실행 파일의 이름을 바꾼 다음 삭제하여이 문제를 극복 할 수 있다는 것도 알게되었습니다.


답변

Visual Studio Premium 2013 (업데이트 3)에서는 사전 빌드 한 라이너로이 문제를 해결했습니다.

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb)

이렇게하면 오래된 PDB 파일이 정상적으로 삭제 된 다음 ( .old.pdb확장 가능 하면) 확장명 이 남아있는 이름이 바뀝니다 . 좋은 부작용은 이전 PDB가 여전히 잠겨 있으면 다른 .old 조각을 파일 이름에 추가하고 다음에 Visual Studio를 다시 시작하고 빌드를 수행 할 때 정리됩니다.

예를 들어, 빌드 / 디버그 세션 1은 MyProject.pdb잠겨 있습니다.
다음에 빌드 할 때 :
MyProject.pdb->MyProject.old.pdb

그런 다음, 빌드 / 디버그 세션이 시작되고, 모두 MyProject.pdbMyProject.old.pdb여전히 잠겨 있습니다 :
MyProject.old.pdb-> MyProject.old.old.pdb
MyProject.pdb->MyProject.old.pdb

마지막으로 Visual Studio를 다시 시작하고 새로 빌드하면 두 가지가 모두 제거되고 평소와 같이 프로세스가 계속됩니다.


답변

응용 프로그램을 닫았지만 여전히 백그라운드에서 실행 중이기 때문입니다.

임시 솔루션 :

  • 작업 관리자 ( Ctrl+ Alt+ Esc)로 이동하십시오.
  • 프로세스 탭으로 이동하여 “YourProjectName.exe”를 찾으십시오.
  • 프로세스를 찾을 수 없으면 “모든 사용자의 프로세스 표시”를 확인하십시오.
  • 처리를 종료하십시오.

영구 솔루션 : 코딩을 통해 애플리케이션을 닫아야합니다. 코드는 다음과 같습니다.

System.Windows.Forms.Application.Exit();

이 코드를 모든 양식의 양식 닫기 이벤트에 넣어야합니다. 예:

private void frm_menu_FormClosing(object sender, FormClosingEventArgs e)
{
    System.Windows.Forms.Application.Exit();
}


답변

.vhost.exe는 디버거 프로세스이므로 디버깅중인 프로세스가 제대로 닫히지 않은 것 같습니다. 버그를 유지하여 디버그 프로세스를 올바르게 중지하지 않을 가능성이 있습니다. 실제로 디버거를 종료하는 대신 ‘디버깅 중지’를 클릭하면 프로세스에서 분리 할 수있는 옵션이 있으므로 해당 세트가있을 수 있습니다.

그러나 그것이 문제입니다-복사하려고하는 파일이 OS에 의해 잠겨있어서 복사를 방지합니다. 파일이 비어 있고 복사 할 수 있는지 확인하십시오.


답변

작업 관리자에서 IISExpress를 죽여서 해결했습니다.


답변

안티 바이러스 (Avast 인 경우 especailly)를 비활성화하고 다시 시도해야합니다. 그것은 나를 도왔다. 문제는 디버거 / 빌더가 Avast에 의해 위협으로 식별 된 .exe 파일을 생성하여 VS에 의해 실행되기 직전에 삭제된다는 것입니다.


답변

다음 사전 빌드 조치를 제공하여이 문제 (VS 2010)를 해결할 수있었습니다.

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

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