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 중 하나입니다.