我有一个包含 100 多个项目(C++、托管 C++、C#)的大型解决方案,其中许多项目相互依赖。
我有一个 TeamCity 服务器,我想在那里构建这个解决方案。
当我在 VisualStudio 中构建解决方案时,一切正常,但使用 TeamCity 时出现 CS0006 错误。我知道为什么会这样——TeamCity 使用 MSBuild 4 来构建解决方案,但在 MSBuild 4 中有一个已知的错误——它忽略了构建顺序并按照它想要的顺序从解决方案构建项目。由于这种行为,如果您有:
Project A
Project B which has reference to A
MSBuild 可以按以下顺序构建这些项目:
1. B
2. A
最简单的解决方案是设置BuildProjectReferences=true(默认),所有引用的项目都将自动构建。但我不能使用这种方法,因为不是所有引用的项目都在这个解决方案中,而且我不能从另一个解决方案构建项目。
这是解决此问题的另一个方法 - 使用ConfigurationManager并禁用所有不应构建的项目,但它仅适用于 VisualStudio - MSBuild 会忽略它并构建所有引用的项目。
问题是恢复构建顺序,我可以在 VisualStudio 窗口ProjectBuildOrder中看到,如果我直接从控制台使用 MSBuild,这不是真的。