2

MSBuild를 사용하여 빌드하는 동안 이상한 문제가 발생했습니다.MSBuild - 프로젝트 참조를 빌드하는 중 경쟁 조건

저는 MSBuild를 사용하여/m (병렬 빌드) 및 BuildProjectReferences를 true로 설정하여 솔루션 파일을 작성하고 있습니다. A.vcxproj와 B.vcxproj가 sln 파일에 있고 B가 A 프로젝트 참조를 가지고 있다고 가정합니다. 프로젝트가 처음 빌드되기 시작하고 컴파일 중 B 프로젝트가 빌드를 시작합니다 프로세스 (이후 병렬 빌드) 및 건물 A 호출합니다. 우리가 두 개의 프로세스가 동일한 프로젝트 A 빌드하려고 및 이제 액세스 문제가 나타납니다 때문에 경쟁 조건이 발생합니다.

A가 완료되지 않았거나 B를 호출 한 경우 MSBuild가 B를 호출하지 말고 A가 여전히 작성 중이며 완료 될 때까지 기다리는 것이 이상적입니다. 아무 것도 발생하지 않습니다. 또한, MSBuild에서만 발생합니다. VS2015 IDE에서 솔루션 파일을 빌드하려고하면 발생하지 않습니다.

MSBuild가 이런 식으로 동작하는 이유는 무엇입니까?

+0

어떤 MsBuild 버전, 어떤 Visual C++ 버전? 그것은 영향력을 가질 수 있습니다. – jessehouwing

+0

VS 2015 및 MSBuild 14.0 – comingbacktolife

답변

1

마지막으로, 너무 SLN 파일에서 모든 종속 projectreference
2를 추가,

의 MSBuild 프로젝트 종속성이 두 가지 방법 vcxproj 자체에서
1에 추가 될 것으로 예상하고 내 문제에 대한 해결책을 발견 프로젝트 종속성을 정의하십시오.

다음 VS 블로그는 실제로 반대를 나타냅니다. 예를 들어 https://blogs.msdn.microsoft.com/vcblog/2010/02/16/project-settings-changes-with-vs2010/은 프로젝트 종속성과 projectreference가 유사하며 하나만 구체적으로 projectreferences를 사용한다고 말합니다.

VS IDE를 사용하여 빌드하면 MSBuild를 빌드 할 때 사실 일 수 있습니다. 프로젝트 종속성이 ProjectReferenceProjectDependencies에 모두 정의되어 있어야합니다.

호프는 내 문제와 동일한 문제를 겪은 사람에게 도움이되기를 바랍니다.