我有一个包含100多个项目的大型解决方案(C++,Managed C++,C#),其中许多项目都依赖于彼此.
我有一个TeamCity服务器,我想在那里构建这个解决方案.
当我在VisualStudio中构建解决方案时,一切都很顺利,但是对于TeamCity,我有一个CS0006错误.我知道为什么这样 - TeamCity使用MSBuild 4来构建解决方案,但MSBuild 4中存在一个已知的错误 - 它忽略了构建顺序并按照它想要的方式从解决方案构建项目.因为这种行为,如果你有:
Project A
Project B which has reference to A
Run Code Online (Sandbox Code Playgroud)
MSBuild可以按以下顺序构建这些项目:
1. B
2. A
Run Code Online (Sandbox Code Playgroud)
最简单的解决方案是设置BuildProjectReferences = true(默认值),并自动构建所有引用的项目.但是我不能使用这种方法,因为在这个解决方案中不是所有引用的项目,我不能从另一个解决方案构建项目.
这是另一个解决此问题的方法 - 使用ConfigurationManager并禁用所有不应构建的项目,但它仅适用于VisualStudio - MSBuild忽略它并构建所有引用的项目.
问题是恢复我在VisualStudio窗口ProjectBuildOrder中可以看到的构建顺序,如果我直接从Console使用MSBuild,则不是这样.