2013-03-15 2 views
0

msbuild 및 Visual studio는 프로젝트 종속성을 다르게 해결하는 것처럼 보입니다. 솔루션 파일에는 주 실행 파일 프로젝트가 포함되어 있으며 실행 파일은 DLL에 의존합니다. 이러한 dll 프로젝트 중 하나는 솔루션의 일부가 아닌 다른 프로젝트에 달려 있습니다.종속 프로젝트 해결

솔루션에는 ExeProject와 MainDllProject가 포함되어 있지만 MainDllProject는 솔루션의 일부가 아닌 SubDllProject에 따라 다르지만 (파일 시스템의 동일한 계층 구조에 있음)). ExeProject는 MainDllProject의 MainDllProjectClass1에 따라 (클래스가 SubDllProject에 의존하지 않으며, 단지 MainDllProjectClass2이 SubDllProject에 따라 달라집니다,하지만 ExeProject도 MainDllProjectClass1 사용하지 않습니다) :

Solution 
    ExeProject 
     Form1 (depends on MainDllProject.MainDllProjectClass1) 
    MainDllProject 
     MainDllProjectClass1 
     MainDllProjectClass2 (depends on SubDllProject.SubDllProjectClass) 
Not part of the solution 
    SubDllProject 
     SubDllProjectClass 

솔루션은 비주얼 스튜디오 2010과 함께 구축 될 때, 실패 : SubDllProject를 찾을 수 없으므로 MainDllProject를 빌드 할 수 없습니다.

솔루션이 msbuild로 빌드되면 빌드가 성공합니다. 이상하게도 SubDllProject의 디버그 버전은/p : Configuration = Release 매개 변수에도 불구하고 빌드됩니다.

msbuild의 로그 파일은 약 374KB이며, 분석 방법에 대한 힌트가 있습니까? 왜 SubDllProject를 빌드하는지, 왜 디버그 버전인지, 그리고 참조되지 않을 때 빌드되지 않도록 방지하는 방법을 알고 싶습니다. (참조 된 모든 프로젝트를 포함하는 솔루션을 원하며, 종속성을 잊어 버렸을 때 오류 메시지를보고 싶음).

참고 :이 경우는 Visual studio build non-dependent projects in solution 유사하지만, 라운드 꽤 다른 방법은 ... 나는 msbuild를 자체 형식으로 SLN 파일을 변환하는 것이 http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx에서 이해 -하지만 sln.metaproj 파일에 대한 참조를 표시하지 않습니다 SubDllProject 중 하나입니다.

답변

0

맞아요, 방금 아주 비슷한 소리가 나는 문제를 겪었습니다.
우리는 버전 제어에서 동일한 디렉토리에 많은 솔루션을 가지고 있으며 그 중 일부는 프로젝트를 공유합니다. 우리는 프로젝트 A를 솔루션 1의 프로젝트 B를 참조하도록 변경했지만 솔루션 2도 프로젝트 A를 사용하지만 프로젝트 B는 포함하지 않는다는 것을 잊었습니다.

경로 참조가 해결되었으므로 프로젝트 B를 만들 때 msbuild가 프로젝트 B를 찾았습니다. 진짜지만, 솔루션에 빌드하기위한 지침이 분명히 없었기 때문에 기본값 (디버그)을 사용했습니다.

짧은 이야기; 여러 개의 공유 프로젝트를 프로젝트 참조하는 여러 솔루션이있는 경우 모든 솔루션에 모든 프로젝트가 있는지 확인하십시오.

관련 문제