gpt4 book ai didi

MSBuild 构建顺序

转载 作者:行者123 更新时间:2023-12-02 11:37:27 25 4
gpt4 key购买 nike

我有一个包含 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,则情况并非如此。

最佳答案

参见Incorrect solution build ordering when using MSBuild.exe在 Visual Studio 博客:

Follow this principle: do not use dependencies expressed in the solution file at all! Better to express dependencies in the file that has the dependency: put a project reference in the project, instead. In our example, that would be a project reference from B to C.

您以前可能没有这样做,因为您不想引用项目引用的目标,而只是订购构建。但是,在 4.0 中,您可以创建一个项目引用,仅订购构建而不添加引用。它看起来像这样——注意元数据元素,所有这些都在 <ItemGroup> 内。当然标签:

<ProjectReference Include="foo.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>

请注意,您必须使用文本编辑器添加子元素 - Visual Studio 可以添加项目引用,但不会公开此元数据的 UI。

我还可以通过删除解决方案文件中的依赖项来进行整理 - 删除像这样现在不需要的行 - 你的 GUID 会有所不同,但使用 VS 对话框,它会完成这项工作...

关于MSBuild 构建顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com