我有一个包含100多个项目(C ++,Managed C ++,C#)且它们之间相互依赖的大型解决方案。
我有一个TeamCity服务器,并希望在那里构建此解决方案。
在Visual Studio中构建解决方案时一切正常,但是在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,则不正确。