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
當解決方案建立與Visual Studio 2010年,失敗:無法建立MainDllProject,因爲無法找到SubDllProject。
當解決方案使用msbuild構建時,構建成功。奇怪的是,無論參數/ p:Configuration = Release,SubDllProject的調試版本都是內置的。
msbuild的日誌文件大約是374 kB,你有一些提示如何分析它嗎?我想理解它爲什麼構建SubDllProject,爲什麼它是調試版本,並且如何防止在未引用時構建SubDllProject(我希望解決方案包含所有引用的項目,並且當某個依賴項被遺忘時,我希望看到一條錯誤消息)。
注:這種情況下,類似於Visual studio build non-dependent projects in solution,但相當反過來... 我從http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx理解的MSBuild轉換SLN的文件轉換成自己的格式 - 但sln.metaproj文件沒有顯示任何參考SubDllProject要麼。