programing

빌드 시 명령 복사본이 코드 4와 함께 종료됨 - Visual Studio 재시작으로 해결

easyjava 2023. 4. 9. 22:32
반응형

빌드 시 명령 복사본이 코드 4와 함께 종료됨 - Visual Studio 재시작으로 해결

여기서 솔루션을 구축하면 (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를 다시 설치했는데 그 이후로 더 잘 작동하지만 여전히 이 문제가 발생합니다.어디선가 리샤퍼 물건들이 있는 것과 관련이 있을까요?

당신은 같은 문제를 가지고 해결한 적이 있습니까?아니면 가능한 해결책이 있나요?

한편, 「 」는, 「 」, 「 」의 사이에/C이 경우 오류가 무시될 수 있으며 빌드가 성공하기 위해 복사해야 하는 파일이 있을 수 있으므로 실제 솔루션이 아닐 수 있습니다.

는 사전 예: " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "$TargetDir코드나 TFS에 다양한 브랜치나 패스를 작성하면, 그 가능성이 매우 높아집니다.

파일이 읽기 전용인 경우도 있습니다., 그럼 여기에다가 더해져요./R읽기 전용 파일을 복사하는 옵션을 선택합니다.사용 가능한 옵션 목록은 다음 사이트에서 확인할 수 있습니다.

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

다른 생각할 수 있는 문제는 기본 폴더에 액세스할 수 없다는 것입니다.."start xcopy""xcopy" 하면 이렇게 하면 관리자 권한이 있는 다른 명령 창이 열립니다.

필자는 이것이 파일 잠금 문제라는 것을 알게 되었습니다.코드 4는 「파일에 액세스 할 수 없다」입니다.xcopy(오류 발생 시 계속)에 /C 옵션을 사용하는 방법이 있습니다.딱히 해결책은 아니지만 대부분 제 빌드 실패를 막았습니다.

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

편집: 64비트 이하에서도 동작하고 있는 것을 방금 알았습니다.

같은 에러를 검출했습니다만, 파일이 잠겨 있는 것은 아니고, 파일이 없습니다.

VS가 존재하지 않는 파일을 복사하려고 한 이유는 빌드 후 이벤트 명령 때문입니다.

그것을 클리어하고 나서, 문제는 해결되었다.

갱신:

@rhughes 코멘트:

진짜 문제는 명령어를 삭제하는 것이 아니라 여기서 명령어를 어떻게 작동시키느냐 하는 것입니다.

그리고 그가 전적으로 옳다.

여기에 이미지 설명 입력

저도 이 문제에 직면했습니다.에러창에서 결과를 재확인합니다.

, 미행입니다.\크래시하고 (xcopy를 사용하고 때)$(TargetDir))의 )의 경우입니다$(SolutionDir)..\bin다른 출력을 사용하고 있는 경우는, 이것을 조정할 필요가 있습니다.

, 「 」, 「 」라고 하는 도 주의해 주세요.start xcopy컴파일 후 오류가 사라지면는 수정하지 않습니다.명령줄에 의해 억제되었을 뿐 실제로 복사된 파일은 없습니다.

명령 셸에서 xcopy 명령을 수동으로 실행할 수 있습니다.여기서 실행하면 올바른 방향을 제시하면서 자세한 내용을 확인할 수 있습니다.

빌드 후 이벤트에 빌드 출력을 어떤 디렉토리에 복사하기 위한 copy/xcopy 명령어가 포함되어 있는 경우(일반적으로 빌드 후 작업 중 가장 일반적인 경우), 소스 또는 타깃의 디렉토리 경로에 공백이 포함된 폴더 이름이 포함되어 있는 경우 문제가 발생할 수 있습니다.디렉토리명의 스페이스를 떼어내,

많은 사이트에서 언급되었듯이, 여기에는 다양한 이유가 있습니다.이것은, 송신원과 행선지의 길이(패스 길이)에 의한 것입니다.명령 프롬프트에서 xcopy를 시도했지만 완전한 소스 및 경로를 입력할 수 없었습니다(일부 문자 이후에는 입력할 수 없습니다).그 후 경로 길이를 줄이고 달릴 수 있었습니다.이게 도움이 됐으면 좋겠다.

이 문제는 여러 경우에 발생할 수 있습니다.

  1. 전체 문자열 경로가 254자를 초과하는 경우.
  2. 복사할 파일의 이름이 잘못된 경우.
  3. 타깃 경로가 잘못된 경우.
  4. 복사된 파일 또는 대상 폴더에 읽기 전용 속성이 설정된 경우.

이 에러는, TFS 빌드 서비스를 실행하고 있던 유저 어카운트에, 행선지 폴더에 쓸 수 있는 권한이 없기 때문에 발생했습니다. Right-click on the folder-->Properties-->Security.

VS를 Administrator 모드로 실행하면 정상적으로 동작합니다.

다른 인스턴스에서 파일을 열었기 때문에 이 오류가 발생하였습니다.

파일을 닫고 솔루션을 다시 빌드했을 때 정상적으로 복사되었습니다.

빌드 후 XCOPY의 경우에도 같은 문제에 직면했습니다.내 경우 폴더에 설정된 읽기 전용 권한 때문에 문제가 발생했습니다.

XCOPY 전에 attribut -R 명령어를 추가했더니 문제가 해결되었습니다.

누군가 도움이 되었으면 좋겠다!

테스트 엔진과 관련하여 xcopy에서도 동일한 오류가 발생했습니다.Visual Studio Professional 2013을 사용하고 있습니다.디폴트로는 테스트 -> 테스트 설정 -> 테스트 실행 엔진 계속 실행이 xcopy 오류 코드4의 원인인 것 같습니다.그것을 끄면 문제가 해결되었다.실행 엔진이 일부 .dls를 유지하는 것 같습니다.

저도 같은 문제가 있었어요.VS의 간단한 '클린 솔루션'에서 오류를 해결했지만 임시 솔루션이었습니다.

파일의 Copy To Output Directory 파라미터를 Copy Always로 설정하면 잠금 문제가 해결된 것으로 보입니다.하지만 지금은 2개의 파일을 복사해서 1개를 삭제해야 합니다.

저도 같은 문제가 있었어요.하지만 나는 아무 것도 잘 되지 않았다.나는 이 문제를 다음과 같이 추가함으로써 해결했다.

exit 0

내 코드에 맞게.문제는 파일을 복사하는 동안 마지막 파일을 찾을 수 없고 bat가 0이 아닌 값을 반환하는 것이었습니다.

이게 누군가에게 도움이 되길 바라!

Windows 7 이후를 실행하고 있는 경우는, 다음의 새로운 「robocopy(로보 카피)」명령어를 시험할 수 있습니다.

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

로보카피에 대한 자세한 내용은 여기를 참조하십시오.

저도 같은 문제에 직면했어요.빌드 후 이벤트를 삭제했고 작동하기 시작했습니다.SQL 컴포넌트를 추가할 때 빌드 후 명령어가 추가될 수 있습니다.

xcopy와 /exclude 옵션을 함께 사용하면 비슷한 것을 얻을 수 있습니다.제 경우 빌드 후 이벤트(명령어 뒤에 줄바꿈과 같은 무해한 것)를 편집하여 프로젝트를 저장하면 오류가 발생합니다./exclude 옵션에 지정된 파일을 다시 저장하면 파일이 다시 작동합니다.

DLL 라이브러리를 쓸 때 xcopy 명령어를 사용하여 프로그램을 검색하여 로드할 수 있는 라이브러리를 복사했습니다.프로그램을 여러 번 열고 닫은 후에도 태스크 매니저에서 여전히 열려 있는 프로세스가 있었는데, 저는 이를 인식하지 못했습니다.

파일을 사용할 수 있는 프로세스를 찾아 닫습니다.

수정 내용: 모든 프로젝트의 솔루션 파일이 아니라 원하는 프로젝트의 특정 솔루션을 자세히 살펴보십시오.

꼭 시도해 보세요.여기서 언급된 다른 것들은 다 해봤지만 소용이 없었습니다.

여기에서는 이것이 웹 앱임을 시사하는 것은 보이지 않지만, 저도 이 문제를 경험했습니다. 빌드 후 이벤트에 대해 2개의 xcopy 명령어를 사용했는데 그 중 1개만 오류가 발생했습니다.파일이 잠겨 있는데 Visual Studio가 아니었습니다(다시 시작해보니).

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

한 a a.iisreset날 위해 묘기를 부렸지

저도 같은 문제가 있었어요.이는 같은 플래그가 2회 존재하기 때문에 발생합니다.다음은 예를 제시하겠습니다.

$(ConfigurationName) == 릴리스(xcopy "$(TargetDir)" "$(SolutionDir)전개\$(프로젝트명)\"/e/d/i/y/e)

"/e" 플래그가 두 번 표시되는 것을 확인합니다.중복된 것을 삭제하면 문제가 해결.

에는 ★★★★★★★★★★★★★★★★★★★★★★★★★.$(OutDir) 말해서..\..\Build\인 경로 상대적인 경로, 상대적인 경로, 상대적인 경로, 상대적인 경로, 상대적인 경로.그리고, 아래와 같이 xcopy를 하려고 했을 때xcopy /y "$(OutDir)Proj1.dll" "Anypath\anyfolder\"네 번째, 4일부러 4번으로 하다

이 명령어는 프로젝트의 csproj 파일이 있는 디렉토리(통상 예상대로)가 아니라 $(OutDir)(제 경우 빌드 폴더) 자체에서 실행되고 있었습니다. ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.File not found에에종 ( 4 ) 。

는 이걸 가 쓸 알 요.cdPost Build ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」

요약하자면, '우리에게 은' '우리에게 필요한 것은' 입니다.copyxcopy$(OutDir) , , , 을 합니다."$(TargetDir)"(이것은 출력 디렉토리의 완전한 패스입니다).또는 경로를 전혀 지정할 필요가 없습니다.

공유 폴더가 있는 VMWare Workstation이 원인일 수 있습니다.

문제가 있습니다.xcopyVM를 사용하다

VM에서 실행 중인 스크립트에서 공유 폴더의 내용을 삭제하여 해결했습니다.

더 자세히 말씀드리자면,

Robocopy는 사용할 수 있는 서브디렉토리를 포함할 필요가 있는 경우에 한해, 훌륭하게 동작합니다./e및 또는 copy empty directorys를 /s빈 디렉토리를 제외한 서브를 포함합니다.

또한 robocopy는 새로운 파일이 복사된 경우 VS가 불만을 제기할 수 있습니다.이는 0보다 큰 것은 모두 실패이기 때문입니다.또한 새로운 파일이 발견되면 1이 반환됩니다.robocopy는 먼저 소스/대상과 비교하여 업데이트된 파일/새 파일만 복사한다는 점을 언급할 필요가 있습니다.

이 사용을 회피하려면:

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

서버 에 ' 구축되어 '를 하고 경우, "Manually"를 실행하고 있는 경우xcopy디버깅 및 개발 머신의 실가동 환경을 에뮬레이트하기 위해서만, 다음의 솔루션을 참조할 수 있습니다.

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

빌드 서버상의 빌드 후 이벤트를 해제하려면

msbuild foo.sln /p:PostBuildEvent=

빌드 서버에서도 실행해야 하는 빌드 후 이벤트가 있고 일반적인 솔루션이 아닌 경우에는 이 방법으로 충분하지 않습니다.그러나 이 문제의 원인은 매우 다양하기 때문에 일반적인 해결책은 있을 수 없습니다.에 대한 중 하나(및 그 될 수 , 처리(「」( 「」등를.xcopy /C특히 빌드 서버 시나리오에서도 도움이 될 수 있지만, 사용할 수 있다면 이 쪽이 더 신뢰할 수 있다고 생각합니다.

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

에러 코드 4는 많은 것을 의미하기 때문에, 자신에게 맞는 솔루션을 찾고, 그것이 동작하는 이유를 이해할 때까지, 다른 답도 읽어 보는 것을 추천합니다(일부 솔루션은 에러 처리를 무효로 할 뿐, 문제를 해결할 수 없는 경우가 있습니다).

병렬 구축과 관련된 파일 잠금 문제일 수 있습니다.회피책은 병렬 빌딩을 사용하지 않는 것입니다.만, 이 동작을 하고 있는 는,-m옵션을 선택하면 프로젝트가 병렬로 구축됩니다.다음과 같은 변형에서는 프로젝트를 병렬로 빌드할 수 없으므로 파일 잠금 문제가 발생하지 않습니다.

msbuild -m:1
msbuild -maxcpucount:1
msbuild

여기서 설명한 것과 달리 이러한 현상은 MSBuild의 "최신" 버전에서도 발생합니다(Build Tools for Visual Studio 2019).

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

@Vemul's와 @Srihari Chinna's의 두 가지 답을 증폭하고 구체화하고 싶다.

  • 원본 경로가 존재하고 프로세스가 원본 경로에 액세스할 수 있는지 확인하십시오.
    • 이것은 특히 변수 치환을 사용하여 소스 경로를 조합하는 경우에 해당됩니다.

언급URL : https://stackoverflow.com/questions/3861474/command-copy-exited-with-code-4-when-building-visual-studio-restart-solves-it

반응형