2011-07-27 3 views
6

CruiseControl.NET 및 MSBUILD를 사용하여 빌드 시간을 개선하고 명령 행 스위치 중 하나 인 maxcpucount를 사용하여 빌드가 병렬로 발생하도록 허용 할 수 있습니다. 우리 솔루션에는 60 개 이상의 프로젝트가 있으므로 어떤 개선이라도 도움이 될 것입니다.MSBUILD는 "프로세스가 다른 프로세스에서 사용 중이므로 xxxxx 파일에 액세스 할 수 없습니다."와 함께 실패합니다. maxcpucount가 1보다 큰 경우

를 ".이 다른 프로세스에 의해 사용 중이므로 파일 XXXX에 액세스 할 수 없습니다 과정은 MSBUILD"그러나, 때마다 하나 이상의 I까지 maxcpucount, 우리는 때문에 자주 빌드 실패를 추가 병렬 빌드 스레드/프로세스가 서로 잠그고있는 것처럼 보입니다.

답변

2

솔루션 파일로 구축하고 있습니까? 그렇다면 솔루션의 프로젝트 종속성 기능을 사용하지 않고 직접 프로젝트 간 프로젝트 참조를 사용하고 있는지 확인하십시오. 조금이라도 사용하면 문제가 발생할 수 있습니다. this article을 참조하십시오.

가능한 한 모든 경우 솔루션 파일을 도려내고 자신 만의 MSBuild 파일을 만들어 빌드를 수행하십시오.

+1

그래, 나는 모든 프로젝트 참조와 솔루션 파일을 짓고 있어요. – JNappi

0

조립품이 다른 조립품에 사용되고있을 가능성이 있습니다. 각 어셈블리가 다른 어셈블리에서 필요하기 전에 빌드되었는지 확인하십시오.

3

솔루션을 찾은 것 같습니다. 그것은/nodeReuse : false 스위치를 추가하면 파일 잠금을 얻지 못하는 것 같습니다. nodeReuse 기능이 msbuild 프로세스를 계속 유지하고 있으며 이후의 빌드를 위해 파일 잠금에 걸려있는 것처럼 보입니다.

http://msdn.microsoft.com/en-us/library/ms164311.aspx

+0

실제로 작동하지 않았습니다. 몇 가지 빌드에 좋았던 것처럼 보였지만 결국에는 DLL이 잠겨서 깨진 빌드로 끝났습니다. – JNappi

+0

파일을 잠그고있는 msbuild가 확실합니까? Process Explorer 또는 유사한 유틸리티를 통해 확인할 수 있습니까? – Mrchief

관련 문제