Visual Studio에서 "xcopy가 코드 4로 종료되었습니다"라는 메시지가 표시 될 때 무엇이 ​​잘못되었는지


125

빌드 후 이벤트에 익숙하지 않기 때문에 프로그램에서 무엇이 잘못되었는지 약간 혼란 스럽습니다. Visual Studio 2010에서 컴파일 할 때 다음을 얻습니다.

The command "xcopy C:\Users\Me\Path\Foo.bar\Library\dsoframer.ocx C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\Foo.bar\ApplicationFiles C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
xcopy C:\Users\Me\Path\url\ C:\Users\Me\Path\Foo.bar\bin\Debug\ /Y /E /D
rmdir /S /Q C:\Users\Me\Path\Foo.bar\bin\Debug\.gwt-tmp" exited with code 4.    

이 오류에도 불구하고 프로그램 정상적으로 실행되는 것처럼 보이지만이 문제를 무시하고 나쁜 일이 발생하지 않기를 바랍니다. 이상하게도이 줄은 단일 명령 (첫 번째 xcopy)으로 시작되었지만 프로젝트를 계속 컴파일 (다른 문제, 대부분 참조)하는 동안 오류 메시지가 점점 더 커졌습니다. 무슨 일이 일어나고 있는지 아십니까?

편집 : 실패한 것처럼 보이는 빌드 후 이벤트는 다음과 같습니다.

xcopy $(ProjectDir)Library\dsoframer.ocx $(TargetDir) /Y /E /D
xcopy $(ProjectDir)ApplicationFiles $(TargetDir) /Y /E /D
xcopy $(SolutionDir)com.myUrl.gwt\www $(TargetDir) /Y /E /D
rmdir /S /Q $(TargetDir).gwt-tmp

2
아래 답변 외에도 Administrator privileges. 특정 위치에 복사하려면 관리자 권한이 필요합니다.
Nikhil 아그라 왈

답변:


166

Xcopy 종료 코드 4는 " 초기화 오류가 발생했습니다. 메모리 나 디스크 공간이 충분하지 않거나 명령 줄에 잘못된 드라이브 이름이나 잘못된 구문을 입력했습니다. "를 의미 합니다.

Visual Studio가 xcopy에 잘못된 인수를 제공하는 것 같습니다. 를 통해 빌드 후 이벤트 명령을 확인하십시오 Project > Right Click > Properties > Build Events > Post Build Event.

경우주의 $(ProjectDir)또는 유사한 매크로 측면 확장 결과 경로에 공백을, 그들은 필요한 큰 따옴표로 포장합니다. 예를 들면 :

xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1

내가 말했듯이 빌드 후 이벤트 스크립트에 대해 많이 알지 못합니다. 이걸 어디서 찾나요?
Raven Dreamer 2011

1
프로젝트 속성> 빌드 이벤트로 이동
Mark Cidade 2011

2
각 명령을 큰 따옴표 ( "command args")로 묶어보십시오 .
Grant Thomas

@Mark Cidade- "빌드 이벤트"가 어디에도없는 것 같습니다. 나열된 공통 속성 : "시작 프로젝트, 프로젝트 종속성, 디버그 소스 파일, 코드 분석 설정". 나열된 구성 속성 : "configuration".
Raven Dreamer 2011

4
@RavenDreamer : $(ProjectDir)(및 / 또는 유사) 확장 경로에 공백이 있으면 따옴표로 묶어야합니다. 예 :xcopy "$(ProjectDir)Library\dsoframer.ocx" "$(TargetDir)" /Y /E /D1
Grant Thomas

34

감시 탭을 "출력"으로 전환하고 xcopy 명령을 찾습니다. 때때로 여기에서 문제를 해결하는 데 도움이 될 수있는 더 많은 메시지 (실제 xcopy 출력)를 찾을 수 있습니다. 출력 탭이 보이지 않으면보기-출력 메뉴를 사용하여 표시하십시오.


30

수락 된 답변 외에도 대상 폴더가 읽기 전용 인 경우에도 오류가 발생할 수 있습니다 (TFS 사용시 공통)


2
그리고 아래에 언급 된 @FelicePollano와 같이 출력 창으로 전환하면 볼 수 있습니다.
Jedidja 2013-07-04

20

소스 파일을 찾을 수없는 경우 xcopy 는 오류 코드 4 도 반환합니다 .


3
이것이 제 경우였습니다. 전 사용 $(TargetDir)으로 끝나는 Release\ . 나를 위해 일한 $(ProjectDir)\bin\Release후행없이 사용\\
Multinerd

12

xcopy 명령이 읽기 전용 파일을 덮어 쓰려고 할 때 ' exited with code 4 '오류를 받았습니다 . xcopy 명령에 / R 을 추가하여이 문제를 해결했습니다 . / R을 나타냅니다 읽기 전용 파일을 덮어 쓰기해야한다

이전 명령 :

XCOPY /E /Y "$(ProjectDir)source file" "destination"

새로운 명령

XCOPY /E /Y /R "$(ProjectDir)source file" "destination"

8

다른 답변에서 설명했듯이 종료 코드 4 에는 많은 원인이있을 수 있습니다.

결과 경로 이름이 최대 허용 길이를 초과 하는 경우를 발견 했습니다 ( 여기 처럼 ).

영향을받는 빌드 후 이벤트에 대해 xcopy를 robocopy로 대체했습니다. robocopy는 경로를 약간 다르게 처리하는 것으로 보이며 xcopy가 처리 할 수없는 복사 작업을 완료 할 수있었습니다.


5

의미 :

초기화 오류가 발생했습니다. 메모리 또는 디스크 공간이 충분하지 않거나 명령 줄에 잘못된 드라이브 이름 또는 잘못된 구문을 입력했습니다.

그래서 기본적으로 그것은 무엇이든 될 수 있습니다. 명령 프롬프트에서 한 번에 하나씩 명령을 실행하여 어떤 명령이 문제를 일으키는 지 파악하십시오.


3

나는 메시지와 함께 이것을 얻었다

잘못된 드라이브 사양

드라이브 이름을 지정하지 않고 네트워크 공유에 복사하는 경우 (예 :

xcopy . \\localhost

어디

xcopy . \\localhost\share

예상했다


2

이 문제를 겪었으므로 명령 줄에서 xcopy 명령을 실행하면 다음과 같이 표시됩니다.

File creation error - The requested operation cannot be performed on a file with
 a user-mapped section open.

실제로 Visual Studio가 무언가를 붙잡고있었습니다. 방금 Visual Studio를 다시 시작했는데 작동했습니다.


1

제 경우에는 잘못된 빌드 순서로 인해 문제가 발생했습니다. 한 프로젝트에는 빌드 후 이벤트에 대한 xcopy 명령이있어 bin 폴더에서 다른 폴더로 파일을 복사했습니다. 그러나 잘못된 종속성으로 인해 xcopy가 진행되는 동안 bin 폴더에 새 파일이 생성되었습니다.

VS에서 빌드 후 이벤트가있는 프로젝트를 마우스 오른쪽 버튼으로 클릭합니다. 빌드 종속성> 프로젝트 종속성으로 이동하여 올바른지 확인하십시오. 프로젝트 빌드 순서 (종속성 옆 탭)도 확인합니다.


1

이 오류는 저장소가 복사되는 곳에 공백이있는 경우 발생합니다. 예를 들어 내 프로젝트가 아래 위치에 복사 c://projects/My rest project 되면 여기에 공백이 표시됩니다. 저장소 경로를 아래로 변경하면 작동합니다. c://projects/myrestproject


0

나는 같은 문제가 있었다. 슬래시가 가리키는 방향을 확인할 수도 있습니다. 저에게는 슬래시 대신 백 슬래시를 사용하는 것이 좋습니다. 예

xcopy /s /y "C:\SFML\bin\*.dll" "$(OutDir)"

대신에:

xcopy /s /y "C:/SFML/bin/*.dll" "$(OutDir)"

0

VS 2017에서 업데이트하기 전에 잘 작동하는 빌드 후 명령이있었습니다. SDK 도구가 업데이트되었고 새 경로 아래에 있었기 때문에 어셈블리에 서명하는 데 사용한 도구를 찾을 수 없었습니다.

이것에서 바뀌었다 ....

call "%VS140COMNTOOLS%vsvars32"
    "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

이에...

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\sn.exe" -Ra "$(TargetPath)" "$(ProjectDir)Key.snk"

매우 미묘하지만 중요한 변경 사항이므로이 오류가 표시되면 업데이트 후 경로를 확인하십시오.


0

주의해야 할 또 다른 점은 이중 백 슬래시 xcopy입니다. 입력 경로 매개 변수 에서는 허용 하지 않기 때문입니다 (그러나 출력 경로 에서는 허용 하지 않습니다 ...).

여기에 이미지 설명 입력


0

다른 솔루션이 디버그 모드에있는 경우 먼저 모두 중지하고 Visual Studio를 다시 시작합니다. 그것은 나를 위해 일했습니다.


0

이는 대상 폴더가 다른 프로세스에서 사용되는 경우에도 발생할 수 있습니다 . 대상 폴더를 사용할 수있는 모든 프로그램을 닫고 시도하십시오.

리소스 모니터 (Windows 도구)를 사용하여 대상 폴더를 사용하는 프로세스를 확인할 수 있습니다.

이것은 나를 위해 일했습니다!.

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