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


347

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

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

내 디버거 설정은

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


나에게 그것은 Release 디렉토리에서 .exe를 수동으로 시작했기 때문에 발생했습니다. 문제는 VS가 여전히 실행중인 실행 파일을 복사 할 수 없다는 것입니다. 창 닫기 버튼 후에 프로그램이 멈추지 않도록 리소스를 올바르게 정리하여 수정하려고합니다.
lahjaton_j

의 해결에 대한 일반적인 단계를이 문제의 좋은 요약이 이 질문
LightCC

이것은 Windows Defender가 더 이상 VS2019 프로젝트의 .exe를 좋아하지 않기로 결정했기 때문에 발생했습니다. 문제없이 몇 주 동안이 문제를 해결했지만 오늘은 새로운 업데이트가 마음에 들지 않습니다. 내 소스 폴더를 제외해야했습니다. 발생이 중지되었습니다.
IronRod

답변:


401

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

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

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

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

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

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


8
VS2013에서도 마찬가지입니다. 종료, 빌드 아티팩트 삭제, 다시 시작-> 모두 양호
cacau

49
나는 같은 문제가 있지만 VS를 다시 시작한 후 하나의 빌드를 얻고 파일이 다시 잠 깁니다.
Sonic Soul

54
이것은 최상의 해결책이 아닙니다. 10 분마다 VS를 다시 시작하고 싶지 않습니다. 솔루션을 청소하면 효과가 있지만 10 분마다 청소하는 것도 솔루션이 아닙니다.
레전드

7
내 경험상 VS2013은 개발중인 컴퓨터에 관계없이 하루에 적어도 10 번이 작업을 수행합니다. 버그가 나빠진 것 같습니다. 그냥 말하세요 '
AR

28
VS 2019에는 버그가 여전히 존재합니다.
Akash KC

107

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를 다시 시작하고 새로 빌드하면 두 가지가 모두 제거되고 평소와 같이 프로세스가 계속됩니다.


5
VS2010, VS 2012에서 동일
Boogier

7
감사합니다. 대신 exe 파일을 사용하도록 예제를 수정하여 완벽하게 작동했습니다. 최신 VS 2015 CTP에서도 버그 일 수 있습니다.
Johny Skovdal

도움이 된 것을 기쁘게 생각합니다-여전히 빌드 전 명령이 설정되어 있으며, 그곳에 있던 것을 잊어 버릴 정도로 잘 작동합니다!
Geoff

3
나는 이것을 원칙적으로 해야하는 것을 싫어하지만 효과가 있습니다. :)이 진주를 공유해 주셔서 감사합니다, Geoff!
kayleeFrye_onDeck

1
최신 (2018-03-11) Visual Studio 2017 v15.6.1 : 여전히 문제가 있습니다. 대상 디렉토리의 디버깅, 예외, 어셈블리가 잠겼습니다. * .pdb가 * .dll로 변경된 위의 솔루션은 여전히 ​​적용됩니다.
Michiel de Wolde

71

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

임시 솔루션 :

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

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

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

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

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

1
바로 그거야. Visual Studio가 충돌하고 IIS Express가 여전히 실행 중입니다 (필자의 경우). 작업 표시 줄을 열고 IIS Express 아이콘을 마우스 오른쪽 단추로 클릭하고 종료하기 만하면됩니다. 감사합니다.
the-nick-wilson

이것은 나를 위해 일했다. 다른 프로세스에서 사용하고 있으므로 obj 및 bin 폴더를 삭제할 수 없습니다. 고맙게도 Windows 10은 실제로 그 이름이 무엇인지 말했습니다. 일단 작업 관리자에서 종료되면 문제가 사라졌습니다
Novastorm

25

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

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


질문에 디버거 옵션을 추가했습니다. 프로세스를 중단해야한다고 확신하지만 일부 옵션을 이해하지 못할 수도 있습니다.
bradgonesurfing

에서 Visual Studio 2019비슷한 결과를 얻었지만 이제 일부 출력 (전체는 아님)의 프로세스를 언급합니다. 를 통해 종료 해야하는 것은 testhost.x86.exe였습니다 Task Manager. 그 후 테스트 프로세스 중 하나를 감지하지 못하는 것 같습니다.
Andez


20

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


잘 잡았습니다. 나는 영원히 Avast를 싫어한다.
stackunderflow 23시

Avast도 저에게 문제였습니다. 파일 시스템 쉴드를 비활성화하는 것이 답이었습니다. Visual Studio \ Projects 폴더를 Exclusions에 추가하려고 시도했지만 작동하지 않았습니다.
KeithB

1
Symantec Endpoint Protection과 동일한 문제가 있습니다. IT 부서의 누군가가 보안 수준을 상당히 높이 올렸습니다. :-) Thanks Pitrs.
ssimm

또한 AV 또는 보호 도구 중 하나를 비활성화하는 대신 obj \ Debug 디렉토리에 대해 편리한 사용을 위해 예외를 만들 수 있습니다.
A. Kali

감사! 내 .exe 파일을 차단하는 MalwareBytes라는 것을 알았습니다.
NL3294

15

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

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

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

1
@luckyluke, 프로젝트 속성에는 사전 빌드 스크립트를 추가 할 수있는 섹션이 있습니다. 지정된 영역에서 위의 스크립트를 복사하여
Nair

13

인용문:

해결 방법은이를> 프로젝트의 빌드 전 이벤트 명령 줄 속성 (빌드 이벤트 탭에서)에 배치하는 것입니다.

코드 스 니펫

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

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

8

예외

Visual Studio 에서 IISExpress를 실행하는 동안 (Build || Rebuild) 경우이 예외가 발생했습니다.

"obj \ Debug \ YourProjectName.dll"파일을 bin \ YourProjectName.dll "파일 로 복사 할 수 없습니다 . 프로세스 가 다른 프로세스에서 사용 중이므로 'bin \ YourProjectName.dll'파일에 액세스 할 수 없습니다 .

해결책

  1. 빌드해야하는 웹 프로젝트를 마우스 오른쪽 단추로 클릭하십시오.
  2. 속성을 클릭하십시오.
  3. 왼쪽에서 이벤트 빌드 탭을 선택하십시오.
  4. 사전 빌드 이벤트 명령 행에서 다음 두 행을 붙여 넣으십시오.
tasklist /fi "imagename eq iisexpress.exe" |find ":" > nul
if errorlevel 1 taskkill /f /im "iisexpress.exe"

당신은 좋은 2 GO입니다!


6

프로젝트의 어셈블리 이름을 변경하면 문제가 해결되는 것 같습니다.

이 대신에

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

나는 이것을 이것으로 바꾼다

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

난 그냥에서 변경 통지 Increment and Recall로는 Increment_Recall, 난 그냥 공백을 제거했습니다. 그것은 지금 나에게 잘 작동하고 있습니다.


6

프로세스 w3wp.exe (IIS)를 종료하면 종종이 문제가 해결됩니다.
일반적으로 bin 폴더로 이동하여 삭제하려고하면 파일에 잠금이있는 프로세스를 알 수 있습니다. 다른 프로세스에서 사용중인 경우 팝업되는 오류 메시지에는 종료해야하는 프로세스 이름이 포함됩니다.


4

Windows 8의 VS 2012 버전 11.0.60610.01 업데이트 3에서 동일한 문제에 직면했습니다.

디자이너 창이 열리지 않았고 프로젝트는 간단한 콘솔 응용 프로그램이었습니다.

프로세스가 파일에 액세스하지 않기 때문에 파일에 액세스하는 vshost 프로세스 제거는 대부분 작동하지 않습니다.

가장 간단한 해결 방법은 솔루션에서 프로젝트를 제거하고 솔루션에서 다른 프로젝트를 빌드 한 다음 원본을 다시 추가하는 것입니다.

그것은 짜증나고 시간 낭비이지만 내가 아는 다른 모든 옵션 중에서 가장 비쌉니다.

도움이 되었기를 바랍니다...


모두 다시 작성하기 만하면 10 번 더 시도해도됩니다. 별로 불편하지 않습니다.
Scott Shaw-Smith

@Scott Shaw-Smith가 작동하지 않습니다. 그리고 내가 본 다른 의견 중 일부에 따르면 다른 사람에게도 효과가 없습니다. 필자의 경우 Avast를 제거하면 문제가 해결되었습니다.
user316117

4

Break all processes when one process breaks디버그 옵션 (op의 첫 번째 스크린 샷-> 두 번째 옵션)에서 확인 표시를 제거하여 해결했다고 생각 합니다.
내가 체크하지 않은 채로 잠시 동안 건물 / 실행 중이었습니다.
내 프로젝트에서 MySql NET Connector 및 DevExpress 컨트롤을 사용하고 있습니다. 이 플래그가 활성화되어 있기 때문에 연결, 바인딩 등을 잘 처리하지 못했을 수 있습니다.

편집 : 확실히 작동합니다! 더 이상 '파일을 복사 할 수 없습니다'및 더 이상 양식 디자이너 오류가 없습니다.


1
다른 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 이것은 유일한 것입니다. 저는 Visual Studio 2017 13.2
xleon을

4

마스터 프로젝트 taskkill / f / fi "pid gt 0"/ im "YourProcess.vshost.exe"의 사전 빌드 이벤트에 추가


이런 식으로 문제를 해결하는 것을 정말로 좋아하지 않지만 이것은 효과가 있습니다!
Petter T

이 문제에 대한 가장 간단한 해결책을 찾았습니다.
dscharge

4

내 10 센트 기부.

VS 2015 업데이트 2 에서이 문제가 여전히 발생합니다.

컴파일 대상을 전환하면 문제가 해결된다는 것을 알았습니다.

이것을보십시오 : DEBUG에 있다면 RELEASE로 전환하고 빌드 한 다음 다시 DEBUG로 돌아갑니다. 문제가 사라졌습니다.

스테파노


네! 그게 다야. 이것은이 성가신 문제에 대한 간단한 해결책입니다! 완전히 나를 위해 일했습니다. 쉽고 빠르게! 고마워요
Meister Schnitzel

1
그것은 나를 위해 작동합니다! 힌트 : 디버그 >> 옵션 >> 디버깅 >> 일반 >> "관리 호환성 모드 사용"을 비활성화하면 해결 방법이 필요하지 않습니다!
leon22

4

아래 단계를 따르십시오

  1. 작업 관리자 열기 (Ctrl + Alt + Delete)
  2. 에서 성능 탭 <선택 선택 ProjectNameOfYours.exe >.
  3. 프로세스 종료를 클릭하십시오.
  4. 이제 솔루션을 빌드하십시오.

위의 단계는 오류를 영구적으로 해결했습니다. :)


4

대답이 없으면이 간단한 점검을 시도하십시오. 프로젝트 EXE를 실행하고 보유하는 MSbuild.exe를 찾으십시오. MSBuild.exe를 종료하면 잘 가야합니다.


2

이 문제가 발생하지 않도록 솔루션을 제공 할 수는 없지만 잠긴 파일 (Windows 탐색기 또는 클래식 명령 창)의 이름을 바꾸고 컴파일 / 빌드 할 수 있습니다. VS201x를 재부팅하거나 다시 시작할 필요가 없습니다. 약간의 경험이 있으면 사전 빌드 스크립트를 추가하여 오래된 파일을 삭제하거나 잠금이있는 경우 외부 이름을 바꿀 수 있습니다.


2

이 다른 답변을 참조하십시오 . 기본적으로 백그라운드를 사용하는 리소스 파일에서 MSBuild.exe 프로세스를 실행할 수 있습니다. 명령 줄을 통해 MSBuild가 시작되는 사전 또는 사후 빌드 작업이있는 경우이 명령에 "/ nr : false"플래그를 추가하십시오. 그러나 더 자세한 내용은 이전 답변을 참조하십시오.


Snap, VS2015 업데이트 2에서 동일한 문제가 있습니다-MSBuild, 다시 빌드하기 전에 TaskManager에서 EXE 프로세스를 종료해야합니다.
Nick Wright

위의 Josh 답변의 기사 링크는 Visual Studio 및 MSBuild 프로세스 (MSBUILDDISABLENODEREUSE = 1)에서 노드 재사용을 비활성화하기 위해 시스템 환경 변수를 사용하는 것을 제안합니다.
Nick Wright

2

나는 마침내 그것을 고치는 방법. 첫 번째 디버그 exe가 여전히 실행 중이므로 첫 번째 디버그 후에 디버그를 계속할 수없는 이유는 무엇입니까? 따라서 첫 번째 디버그 후 작업 관리자-> 프로세스 탭-> [프로젝트 이름 exe]로 이동하여 exe 프로세스를 종료해야합니다.

그것은 나를 위해 작동합니다 :)


와우, 고마워, 내 문제 야 exe를 실행하는 동안 사용자 암호를 묻는 메시지가 처음으로 실행되지 않았습니다. 프로세스 목록에서 해당 앱을 삭제 한 다음 다시 디버깅하려고하면 완벽하게 작동했습니다.
찬드라 프라 카쉬

2

@ Geoff 's ( https://stackoverflow.com/a/25251766/3739540 ) 답변은 좋지만 다시 컴파일 할 때 오류 코드 1이 발생합니다.

다음은 나를 위해 일한 것입니다 (2> nul 1> nul on end + exit 0).

(if exist "$(TargetDir)*old.pdb" del "$(TargetDir)*old.pdb") & (if exist "$(TargetDir)*.pdb" ren "$(TargetDir)*.pdb" *.old.pdb) 2>nul 1>nul
(if exist "$(TargetDir)*old.dll" del "$(TargetDir)*old.dll") & (if exist "$(TargetDir)*.dll" ren "$(TargetDir)*.dll" *.old.dll) 2>nul 1>nul
exit 0

2

T4 템플릿을 디버깅하는 경우 ,이 모든 시간을 발생합니다. 내 솔루션 (MS가 수정하기 전에) 은이 프로세스를 종료하는 것입니다.

작업 관리자-> 사용자-> T4VSHostProcess.exe

이 프로세스는 T4 템플릿을 실행할 때가 아니라 T4 템플릿을 디버깅 할 때만 나타납니다.


2

이 문제를 확실하게 제거하는 스크립트는 다음과 같습니다.

REM   This script is invoked before compiling an assembly, and if the target file exist, it moves it to a temporary location
REM   The file-move works even if the existing assembly file is currently locked-by/in-use-in any process.
REM   This way we can be sure that the compilation won't end up claiming the assembly cannot be erased!

echo PreBuildEvents 
echo  $(TargetPath) is %1
echo  $(TargetFileName) is %2 
echo  $(TargetDir) is %3   
echo  $(TargetName) is %4

set dir=C:\temp\LockedAssemblies

if not exist %dir% (mkdir %dir%)

REM   delete all assemblies moved not really locked by a process
del "%dir%\*" /q

REM   assembly file (.exe / .dll) - .pdb file and eventually .xml file (documentation) are concerned
REM   use %random% to let coexists several process that hold several versions of locked assemblies
if exist "%1"  move "%1" "%dir%\%2.locked.%random%"
if exist "%3%4.pdb" move "%3%4.pdb" "%dir%\%4.pdb.locked%random%"
if exist "%3%4.xml.locked" del "%dir%\%4.xml.locked%random%"

REM Code with Macros
REM   if exist "$(TargetPath)"  move "$(TargetPath)" "C:\temp\LockedAssemblies\$(TargetFileName).locked.%random%"
REM   if exist "$(TargetDir)$(TargetName).pdb" move "C:\temp\LockedAssemblies\$(TargetName).pdb" "$(TargetDir)$(TargetName).pdb.locked%random%"
REM   if exist "$(TargetDir)$(TargetName).xml.locked" del "C:\temp\LockedAssemblies\$(TargetName).xml.locked%random%"

REM PreBuildEvent code
REM   $(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

REM References:
REM   http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx
REM   http://stackoverflow.com/a/2738456/27194
REM   http://stackoverflow.com/a/35800302/27194

스크립트는 각 VS 프로젝트 사전 빌드 이벤트에서 호출해야합니다.

$(SolutionDir)\BuildProcess\PreBuildEvents.bat  "$(TargetPath)"  "$(TargetFileName)"  "$(TargetDir)"  "$(TargetName)"

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


2
  1. 프로젝트 속성 열기 [메뉴> 프로젝트> 속성]
  2. "디버그"탭을 선택하십시오
  3. "Visual Studio 호스팅 프로세스 사용"을 선택 취소하십시오.
  4. 디버깅 시작 [F5]
  5. "ok"라는 보안 경고가 나타납니다. 응용 프로그램을 실행할 수 있습니다
  6. 디버깅을 중지하십시오.
  7. 디버그 탭에서 "Visual Studio 호스팅 프로세스 사용"옵션을 확인하십시오.
  8. 이제 디버깅을 시작하면 오류가 다시 표시되지 않습니다.

[나를 위해 일하십시오]


왜 -2에 있었습니까? 그것은 나를 위해 일했다. 그것은 의미가 없지만, 작동하면 작동합니다.
Wakka02

이것이 영구적 인 해결책입니까? 즉, 매번이 8 단계를 수행해야합니까?
Arthur Swails

vs17 님은 호스팅 프로세스 옵션이 없습니다
John Demetriou

1

이 질문은 다음 오류를 찾을 때 첫 번째 결과였습니다.

"..."파일을 찾을 수 없으므로 파일을 복사 할 수 없습니다.

Visual Studio 2013에서 빌드 할 때 (업데이트 3)

솔루션 : Visual Studio 2013에서 "생산성 전원 도구"제거

https://connect.microsoft.com/VisualStudio/feedback/details/533411


TFS에서 상속 된 프로젝트를 빌드 할 때이 오류가 여러 번 발생합니다. 이것이 사실이라고 생각했습니다! 설치된 프로그램 및 추가 기능에서이를 검색했습니다. 이 전동 공구 응용 프로그램을 찾을 수 없습니다. 어디 숨길까요?
Taersious 2016 년

1

제 경우에는 Resharper Unit Tests 러너였습니다 (플러스 NUnit 테스트, MsTests와 같은 문제는 없었습니다). 프로세스를 종료 한 후 OS 또는 VS2013을 다시 시작하지 않고도 프로세스를 다시 빌드 할 수있었습니다.


예,JetBrains.Resharper.TaskRunner.*
Dunc

1

나는 여전히 내 디버거가 연결되어 있고 동일한 Visual Studio 인스턴스에서 빌드하려고한다는 것을 알지 못했습니다. 디버거를 중지하면 빌드 할 수있었습니다.


1

살인 vstest.executionengine.exe 과정 (들은) 나를 위해이 문제를 시간의 90 %를 해결합니다. 그래도 작동하지 않으면 QTAgent32.exe 를 종료 한 다음 해당 프로젝트의 / bin 및 / obj 폴더를 삭제 해도 됩니다.

이것은 나의 근무일에서 가장 짜증나는 부분입니다. :)


1

나를 위해 Visual Studio가 파일을 쓰거나 읽거나 실행하지 못하게하는 것은 Avast 바이러스 백신이었습니다. 따라서 Visual Studio 2010/2012 폴더를 바이러스 백신 제외 목록에 추가해야했습니다. 그리고 그 baam 직후에 ... 그것은 작동합니다.


1

모든 인스턴스 wcfSvcHost를 닫고 다시 시도하십시오. 그것은 나를 위해 일했다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.