태그 보관물: msbuild

msbuild

msbuild.exe가 열린 상태로 파일을 잠급니다. 버렸기 때문에 가능한 한 자세한 정보를 제공하도록

차례로 msbuild (.NET 4)를 호출하는 TeamCity를 사용합니다. 빌드가 완료된 후 (성공적인 빌드인지 여부는 중요하지 않은 것 같음) msbuild.exe가 열린 상태로 유지되고 파일 중 하나가 잠 깁니다. 즉, TeamCity가 시도 할 때마다 작업 디렉토리를 지우면 실패하고 계속할 수 없습니다.

이것은 거의 매번 발생합니다 .

이 부분을 잃어 버렸기 때문에 가능한 한 자세한 정보를 제공하도록 노력하겠습니다.

  • 서버는 Windows Server 2008 표준 64 비트 SP2가있는 Intel Core i7, 2GB ram입니다.
  • TeamCity에서 msbuild 실행기는 /m명령 줄 매개 변수 (다중 코어 사용을 의미 함)로 구성됩니다.
  • 문제의 파일은 항상 경로의 .NET 프로젝트 중 하나에서 참조되는 동일한 외부 DLL입니다 External Tools\Telerik\Telerik.Reporting.Dll. ( External Tools이 문제를 일으키지 않는 유사한 경로 구조 의 dir에 포함 된 다른 여러 .DLL 파일 이 있습니다.) 현재 이것은 차이가있을 경우를 대비하여 Telerik 보고서의 평가판 버전입니다.
  • 문제가 발생하면 msbuild.exe *32작업 관리자에 항상 여러 프로세스가 나열됩니다. 7이 있다고 생각합니다. Process Explorer를 사용하면 모두 최상위 프로세스 (부모 없음)처럼 보입니다. 그들은 모두 20-50MB 램과 0.0 % CPU를 사용하고 있습니다.
  • 1-3 분 정도 기다리면 msbuild.exe 프로세스가 자동으로 종료되고 TeamCity가 작업 디렉터리를 올바르게 업데이트 할 수 있습니다.
  • msbuild 프로세스를 수동으로 종료하면 TeamCity의 업데이트가 즉시 다시 작동합니다.
  • 인덱싱 서비스는 Windows에서 꺼져 있습니다 (이전의 두 지점은 문제를 일으키는 msbuild.exe임을 거의 확인합니다).
  • Telerik.reporting.dll에는 특별한 속성이 없습니다. 유일한 SVN 속성은svn:mime-type = application/octet-stream

전에이 문제를 겪은 사람이 있습니까?



답변

msbuild와 함께 사용하십시오 /nr:false.

간단히 말해서 MSBuild는 특히 병렬 빌드에서 많은 작업을 빠르게 수행하려고합니다. 많은 “노드”-프로젝트를 컴파일 할 수있는 개별 msbuild.exe 프로세스를 생성합니다. 프로세스를 실행하는 데 약간의 시간이 걸리기 때문에 빌드가 완료된 후 이러한 프로세스가 중단됩니다 (기본적으로 15 분 동안). ), 곧 다시 빌드 할 경우 이러한 노드를 “재사용”하여 프로세스 설정 비용을 절약 할 수 있습니다. 그러나 앞서 언급 한 명령 줄 옵션으로 nodeReuse를 끄면 해당 동작을 비활성화 할 수 있습니다.

또한보십시오:


답변

Visual Studio 내에서 노드 재사용을 비활성화하려면 환경 변수를 사용해야합니다.

MSBUILDDISABLENODEREUSE=1


답변