빌드시 코드 4로 명령 복사가 종료되었습니다.-Visual Studio를 다시 시작하면 문제가 해결됩니다.


151

때때로 여기에 솔루션을 빌드 할 때 (7 개의 프로젝트가 있음) Visual Studio 2010 Premium ed에서``코드 4로 종료 된 명령 사본 ''오류가 발생합니다.

이는 빌드 후 이벤트가 진행되지 않기 때문입니다.

일시적으로 문제를 해결하는 방법은 다음과 같습니다.

  • 때때로 : Visual Studio를 다시 시작하면 솔루션을 빌드 할 수 있습니다.
  • 때때로 : Visual Studio를 다시 시작하고 선택한 파일 관리자 (Q-Dir 4.37)가 문제를 해결합니다.

빌드 후 이벤트는 다음과 같습니다.

xcopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)" /Y

코드 [삽입 값] 오류와 함께 명령 사본이 종료되면 일반적으로 다음과 같은 원인이 있습니다.

  • 읽기 / 쓰기 권한
  • 누락 된 파일
  • 잘못된 디렉토리

그러나 분명히 솔루션을 빌드 할 때 아무런 문제가 없습니다.

참고로, 나는 2 주 전에 ReSharper 5.1.1을 제거했으며 그 이후로 Visual Studio에서 오류가 발생했습니다 (디버그 할 수 없음). Visual Studio를 다시 설치했지만 그 이후로는 더 잘 작동하지만 여전히이 문제가 발생합니다. ReSharper와 관련이있을 수 있습니까?

같은 문제가 있고 해결 했습니까? 아니면 가능한 해결책이 있습니까?

답변:


74

나는 이것이 파일 잠금 문제라는 것을 항상 발견했다. 코드 4는 파일에 액세스 할 수 없습니다. 내가 찾은 부분 해결책 중 하나는 xcopy에 / C 옵션을 사용하는 것입니다 (오류가 계속 발생합니다). 실제로 해결책은 아니지만 대부분 빌드가 실패하는 것을 막았습니다.

32 비트에서만 작동하는 또 다른 솔루션은 잠금 해제 도구를 사용 하여 복사하기 전에 파일의 창 핸들을 해제하는 것입니다.

편집 : 64 비트에서도 작동한다는 것을 깨달았습니다.


3
위의 xcopy 명령에 / C 옵션을 추가하고 빌드가 성공했습니다. 감사! 언 락커는 때때로 귀중합니다.
Martin S Ek

2
파일 중 하나가 읽기 전용이기 때문에이 문제가 발생했습니다. 일단 변경하면 효과가있었습니다.
밥 혼

또한 문제를 일으키는 파일에 대한 읽기 전용 권한을 제거하여이 문제가 해결되었음을 증명할 수 있습니다. 설명 된 문제를 일으키는 외부 bin 폴더가 있습니다. 읽기 전용 특성을 제거하면 솔루션을 빌드하려고 할 때 오류가 사라졌습니다.
eniacAvenger

3
당신이 가리키는이 잠금 해제 장치는 거의 모든 것에 의해 바이러스로 탐지됩니다. (Google 안전 브라우징, eset, virustotal ...). 여기에 대한 논의 될 것으로 보인다 cnet.com/forums/discussions/unlocker-contains-malware-558941을
v.oddou

이 답변의 나이를 기억하십시오. 당신이 주장하는 바이러스는 실제로 잠금 해제 소프트웨어 자체가 아닌 설치 프로그램에 번들로 제공되는 것으로 보이는 애드웨어입니다.
Preet Sangha

196

/C오류를 무시할 수는 있지만 빌드가 성공하려면 반드시 복사해야하는 파일이있을 수 있으므로 실제 솔루션이 아닐 수도 있습니다.

가장 일반적인 문제는 사전 정의 된 명령 태그 (예 :) 주위에 누락 된 따옴표 $TargetDir입니다. 코드 나 TFS에서 다양한 브랜치와 경로를 만들면 이런 일이 발생할 가능성이 매우 높습니다.

파일이 읽기 전용 인 경우에도 문제가 발생할 수 있습니다. /R읽기 전용 파일을 복사 할 수 있는 옵션을 추가하십시오 . 사용 가능한 옵션 목록은 다음에서 찾을 수 있습니다.

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/xcopy.mspx?mfr=true

또 다른 가능한 문제는 기본 폴더에 액세스 할 수 없다는 것입니다. 그렇다면 "start xcopy"대신 대신 수행해보십시오 "xcopy". 관리자 권한이있는 다른 명령 창이 열립니다.


53
'start'는 나를 위해 고쳤습니다 ... 다른 포럼에서 목적지가 내 상자에 'Everyone'에 대한 FullControl이 있지만 'start'가 해결되는 권한 문제 인 것 같습니다. 또한 'start / MIN xcopy ...'를 실행하여 창 깜박임을 최소화 할 수 있습니다
mdisibio

2
c : \ windows \ system32 \ xcopy.exe $ (TargetPath) <대상 경로>를 c : \ windows \ system32 \ xcopy.exe "$ (TargetPath)"<대상 경로>로 변경했으며 지난 50 년 동안 문제가 없었습니다. 빌드합니다.
pennyrave jan

1
"$ (OutDir) $ (TargetFileName)"을 사용하여 "$ (TargetPath)"로 변경하면 문제가 해결됩니다. '시작'을 사용하는 것과 마찬가지로!
서핑

내 문제는 하이픈 대신 부모 폴더 이름 중 하나에 en-dash 문자를 사용하는 것 같습니다. "1234 – ABCD"와 같은 단어에서 분기 폴더의 이름을 복사 / 붙여 넣기하는 실수를했습니다. 이름을 "1234-ABCD"로 바꾸었고 xcopy는 이제 잘 작동합니다.
Sudeep

경우에 따라 추가 start하고 /R.. 어떤 트릭을 수행했는지 확실하지 않지만 작동했습니다! 감사!
sǝɯɐſ

19

나는 같은 오류를 겪었지만 파일이 잠겨 있지 않기 때문에 파일이 없습니다.

VS가 기존 파일이 아닌 파일을 복사하려고 시도한 이유는 빌드 후 이벤트 명령 때문입니다.

내가 그것을 정리 한 후 문제가 해결되었습니다.

최신 정보:

@rhughes는 다음과 같이 언급했습니다.

실제 문제는 명령을 제거하는 대신 여기에서 명령을 수행하는 방법입니다.

그리고 그는 절대적으로 옳습니다.

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


1
빌드 후 파일을 복사하는 경우 여기에 명령을 입력했기 때문일 수 있습니다. 실제 문제는 명령을 제거하는 대신 여기에서 명령을 수행하는 방법입니다.
rhughes

9

나는 또한이 문제에 직면했다. 오류 창에서 결과를 두 번 확인하십시오.

제 경우에는 꼬리 \가 xcopy와 충돌했습니다 (을 사용하는 것처럼 $(TargetDir)). 내 경우에는 $(SolutionDir)..\bin. 다른 출력을 사용하는 경우 조정해야합니다.

또한 start xcopy컴파일 후 오류가 사라지면 수정하지 마십시오. 명령 행에 의해 억제되었을 수 있으며 실제로 파일이 복사되지 않았습니다!

명령 쉘에서 xcopy 명령을 수동으로 실행할 수 있습니다. 당신이 올바른 방향으로 당신을 가리키는, 그들을 실행할 때 자세한 내용을 얻을 수 있습니다.


$ (OutDir)에서도 마찬가지입니다. 모든 경로 매크로의 끝에 "\"가 있고 xcopy와 충돌하는 것 같습니다
Leo Kolezhuk

6

빌드 후 이벤트에 빌드 출력을 일부 디렉토리 (일반적으로 가장 일반적인 빌드 후 작업)에 복사하기위한 copy / xcopy 명령이 포함 된 경우 소스 또는 대상 대상의 전체 디렉토리 경로에 다음을 포함하는 폴더 이름이 포함 된 경우 문제가 발생할 수 있습니다. 공백. 디렉토리 이름을위한 공간을 제거하고 시도하십시오.


5

많은 사이트에서 언급했듯이 여기에는 여러 가지 이유가 있습니다. 나에게 그것은 소스와 목적지의 길이 (경로 길이) 때문이었습니다. 명령 프롬프트에서 xcopy를 시도했는데 전체 소스와 경로를 입력 할 수 없었습니다 (일부 문자 후에는 입력 할 수 없음). 그런 다음 경로 길이를 줄이고 실행할 수있었습니다. 도움이 되었기를 바랍니다.


4

관리자 모드에서 VS를 실행하면 정상적으로 작동합니다.


1
VS를 관리자로 실행하고 있지만 작동하지 않습니다.
Arafat

일부 사용자는 관리자 모드에서 실행하지 못할 수 있습니다.
MrSpudtastic

3

TFS 빌드 서비스가 실행중인 사용자 계정에 대상 폴더에 쓸 수있는 권한이 없기 때문에이 오류가 발생했습니다. Right-click on the folder-->Properties-->Security.


"Tangodancer"및 / 또는 "Abdul Rahman"으로 출발합니다. 폴더를 마우스 오른쪽 버튼으로 클릭 -> 속성 -> 보안 독립형 XP의 SP3 시스템에서 나를 위해 문제를 해결 감사합니다

3

여러 경우에 발생할 수 있습니다.

  1. 전체 문자열 경로가 254 자보다 긴 경우
  2. 복사 할 파일 이름이 잘못되었을 때
  3. 대상 경로가 잘못되었을 때
  4. 복사 한 파일 또는 대상 폴더에 읽기 전용 속성이 설정된 경우

2

다른 인스턴스에서 파일이 열렸 기 때문에이 오류가 발생했습니다.

파일을 닫고 솔루션을 다시 빌드하면 성공적으로 복사되었습니다.


2

빌드가 완료된 후 XCOPY의 경우 동일한 문제에 직면했습니다. 필자의 경우 폴더에 설정된 읽기 전용 권한으로 인해 문제가 발생했습니다.

XCOPY 전에 attrib -R 명령을 추가하여 문제를 해결했습니다.

그것이 누군가를 돕기를 바랍니다!


2

테스트 엔진과 관련하여 xcopy와 동일한 오류가 발생했습니다. VisualStudio Professional 2013을 사용하고 있습니다. 기본적으로 테스트-> 테스트 설정-> 테스트 실행 엔진 실행 유지는 xcopy를 사용하는 오류 코드 4의 원인으로 보입니다. 전원을 끄면 문제가 해결되었습니다. 실행 엔진은 일부 .dll을 유지하는 것 같습니다.


1

나는 같은 문제가 있었다. VS의 간단한 'Clean Solution'은 오류를 해결했지만 일시적인 해결책이었습니다.


이 문제가 발생하여 "Clean Solution"이 도움이되지 않았습니다. "청소 솔루션"이 매번 작동합니까?
qxotk

1

파일의 Copy To Output Directory 매개 변수를 Copy Always로 설정하면 잠금 문제가 해결 된 것으로 나타났습니다. 지금은 파일의 사본이 2 개 있으며 삭제해야합니다.


1

나는 같은 문제가 있었다. 그러나 아무것도 나를 위해 일하지 않았다. 추가하여 문제를 해결했습니다.

exit 0

내 코드에. 문제는 파일을 복사하는 동안 마지막 파일을 찾을 수 없으며 박쥐가 0이 아닌 값을 반환한다는 것입니다.

이것이 누군가를 돕기를 바랍니다!


1

Windows 7 이상을 실행중인 경우 새로운 'robocopy'명령을 시도 할 수 있습니다.

robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)"

robocopy에 대한 자세한 내용은 여기를 참조하십시오 .


1

나는 같은 문제에 직면했다. 빌드 후 이벤트를 삭제하고 작동하기 시작했습니다. 일부 SQL 구성 요소를 추가 할 때 빌드 후 명령도 추가 될 수 있습니다.


1

/ exclude 옵션과 함께 xcopy를 사용하여 비슷한 것을 얻습니다. 필자의 경우 빌드 후 이벤트를 편집하고 (명령 후 줄 바꿈처럼 무해한) 프로젝트를 저장하면 오류가 발생한다는 것을 알았습니다. / exclude 옵션에 지정된 파일을 다시 저장하면 파일이 다시 작동합니다.


1

DLL 라이브러리를 작성하면서 xcopy 명령을 사용하여 프로그램을 찾아로드 할 수있는 라이브러리를 복사했습니다. 프로그램을 여러 번 열고 닫은 후에도 내가 인식하지 못한 작업 관리자에서 여전히 열린 프로세스가있었습니다.

파일을 사용할 수있는 프로세스를 찾아 닫으십시오.


1

나를 위해 고 쳤던 : 원하는 프로젝트의 특정 솔루션, 즉 모든 프로젝트의 전체 솔루션 파일이 아닌 것을 찾으십시오.

시도하십시오-나는 여기에 언급 된 다른 모든 것을 시도했지만 아무 소용이 없습니다.


1

나는 이것이 웹 응용 프로그램이라는 것을 제안하기 위해 여기에 아무것도 보지 못했지만이 문제를 직접 경험했습니다. 포스트 빌드 이벤트에 두 개의 xcopy 명령이 있고 그중 하나만 실패했습니다. 무언가 파일에 잠금이 있었고 Visual Studio가 아닙니다 (다시 시작하려고 시도했을 때).

내가 만든 dll을 사용했을 유일한 것은 IIS였습니다. 그리고 보라.

간단한 iisreset트릭이 나를 위해했습니다.


1

나는 같은 문제가 있었다. 예를 들어 같은 플래그를 두 번 사용했기 때문입니다.

$ (ConfigurationName) == Release 인 경우 (xcopy "$ (TargetDir) . " "$ (SolutionDir) Deployment \ $ (ProjectName) \"/ e / d / i / y / e)

"/ e"플래그가 두 번 나타나는지 확인하십시오. 중복을 제거하면 문제가 해결되었습니다.


1

내 경우에는 $(OutDir)단순히 단순히 ..\..\Build\상대 경로였습니다. 그리고 다음과 같이 xcopy하려고 할 때 xcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\"종료 코드 오류 4가 발생했습니다.

무슨 일이 있었는지,이 명령은 $ (OutDir) (내 경우에는 빌드 폴더) 자체에서 실행되었으며 프로젝트의 csproj 파일이있는 디렉토리는 아닙니다 (일반적으로 예상 한대로). 따라서 계속 File not found오류 가 발생했습니다 (종료 코드 4에 해당).

cdPost Build 이벤트를 작성할 때까지 이것을 알아낼 수 없었 습니다.이 디렉토리가 실행되는 디렉토리를 인쇄했습니다.

우리가하고자하는 경우에 따라서, 요약하기 copy/ xcopy으로부터 파일 $(OutDir), 하나를 사용 "$(TargetDir)"하거나 전혀 경로를 지정하지 않아도됩니다 (전체 출력 디렉토리에 대한 경로입니다).


0

공유 폴더가있는 VMWare Workstation으로 인해 발생할 수 있음

의 destinatinon 폴더가 xcopyVM에서 공유 폴더로 매핑 될 때 항상 문제 가 있습니다.

vm에서 실행되고 공유 폴더의 내용을 삭제하는 스크립트로 해결했습니다.


0

rhughes 답변을 확장하려면

robocopy는 하위 디렉토리 /e를 포함하고 빈 디렉토리를 복사하거나 /s빈 디렉토리를 제외한 하위 디렉토리 를 포함 하는 데 사용할 수있는 하위 디렉토리를 포함 해야하는 경우를 대비하여 아름답게 작동합니다 .

또한 robocopy는 새 파일이 복사 된 경우와 같은 몇 가지 사항을 다시보고합니다 .0 이상은 실패이므로 VS가 불만을 제기하고 새 파일이 발견되면 robocopy는 1을 반환합니다. robocopy는 먼저 소스 / 대상을 비교하고 업데이트 된 / 새 파일 만 복사한다는 점은 언급 할 가치가 있습니다.

이 문제를 해결하려면 다음을 수행하십시오.

(robocopy "$(SolutionDir)Solution Items\References\*.dll" "$(TargetDir)") ^& IF %ERRORLEVEL% LEQ 4 exit /B 0

0

프로젝트가 빌드 서버에서 빌드하지 못했지만 개발자 머신에서 "수동으로"빌드하고 개발자 머신에서 xcopy프로덕션 환경을 디버깅하고 에뮬레이션하기 만하는 경우 여기에 있습니다. 이 솔루션에서 :

https://stackoverflow.com/a/1732478/2279059

다음을 사용하여 빌드 서버에서 빌드 후 이벤트를 해제하십시오.

msbuild foo.sln /p:PostBuildEvent=

빌드 서버에서 실행해야하는 다른 빌드 후 이벤트가있는 경우 이는 충분하지 않으며 일반적인 솔루션이 아닙니다. 그러나이 문제의 원인은 매우 다양하므로 일반적인 해결 방법은 없습니다. 이 질문에 대한 많은 답변 중 하나 (그리고 그 중복)가 도움이 될 것입니다. 그러나 어떻게 든 오류 처리 (예 :)를 피하는 접근법에주의하십시오 xcopy /C. 그것들은 특히 빌드 서버 시나리오에서도 당신에게 효과적 일 수 있지만, 이것이 사용될 수 있다면 더 신뢰할 수 있다고 생각합니다.

또한 최신 버전의 Visual Studio에서는 문제가 더 이상 존재하지 않으므로 이전 버전을 사용하는 경우 빌드 도구를 업데이트하는 것이 좋습니다.


0

오류 코드 4는 많은 것을 의미 할 수 있으므로 나에게 맞는 솔루션을 찾을 때까지 다른 답변을 읽는 것이 좋습니다. 왜 작동하는지 이해합니다 (일부 솔루션은 오류 처리 만 비활성화합니다. 해결).

병렬 빌드와 관련된 파일 잠금 문제 일 수 있습니다. 해결 방법은 병렬 건물을 사용하지 않는 것입니다. 이것이 기본 동작이지만 -m옵션을 사용하는 경우 프로젝트가 병렬로 빌드됩니다. 다음 변형은 프로젝트를 병렬로 빌드해서는 안되므로 파일 잠금 문제가 발생하지 않습니다.

msbuild -m:1
msbuild -maxcpucount:1
msbuild

여기에서 말한 것과는 달리, 이는 최신 빌드 버전의 MSBuild (Visual Studio 2019 용 빌드 도구에서)에서도 발생합니다.

최상의 해결책은 빌드 후 단계에서 파일을 복사 할 필요가 없도록하는 것입니다. 경우에 따라 빌드 서버에서 MSBuild로 빌드 할 때 빌드 후 단계를 비활성화 할 수도 있습니다. https://stackoverflow.com/a/55899347/2279059

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