如何在 VS2022 中确定 C# 项目构建的优先级

问题描述 投票:0回答:1

我有一个由 127 个项目组成的 C# .NET Core Web 应用程序解决方案。

其中一些更小,构建速度更快(不到 3 秒),一些持续时间更长(超过 45 秒)。 不幸的是,其中一些持久的东西是在最后建造的,没有明显的原因。

例如,持续 45 秒的项目在 127 个项目中被构建为第 111 个,这会导致在构建最后一个项目(该项目依赖于较慢的项目)之前延迟 30 秒以上。

缓慢的项目仅对其他 17 个项目有直接/间接依赖,因此我想强制 VS2022 在这 17 个项目完成后立即开始构建它。

我正在运行 16 个并行构建,因此让一些核心忙于大型项目并让小型项目并行构建会很棒。

从VS的角度来看,建造第18个或第111个并不重要,但太晚开始该项目就意味着直接延长总建造时间。这同样适用于该解决方案中的其他较大项目。

所有这 127 个项目的构建时间总和除以并行度表明,如果没有由于过晚构建较大项目而导致的延迟,解决方案的总构建时间可能会缩短 40%。

那么是否有任何标志、设置技巧可以让我强制 VS 准备构建顺序,以便这些优先项目(及其依赖项)更快构建,而其余项目则以“随机”顺序尊重依赖项?

我尝试向该项目上的其他项目添加人工构建依赖项,以推迟其构建并使 VS 更快地选择慢速项目。

如果依赖关系过于严格,这个缓慢的项目会被构建为第 70 个项目,但其他项目正在等待这个项目,因此延迟仍然存在,并且 CPU 没有得到充分利用。 如果依赖关系不是那么严格,VS 会过早构建较小的项目,从而导致延迟。

即使手动编辑解决方案文件并重新排序项目(不修改任何依赖项)也会对排序产生影响,并且上述项目在某些修改后构建为第 90 个,在其他修改后构建为第 103 个。但我找不到任何线索我对 sln 文件的编辑如何影响构建顺序。

c# build visual-studio-2022
1个回答
0
投票

您可以使用 MSBuild 命令行工具进行自定义构建并通过以下方式控制项目的构建顺序:

  1. 清洁解决方案:

    msbuild YourSolution.sln /t:Clean

  2. 首先构建一个高优先级项目及其依赖项:

    msbuild YourSolution.sln /t:ProjectA msbuild YourSolution.sln /t:ProjectB

  3. 构建项目的其余部分:

    msbuild YourSolution.sln

© www.soinside.com 2019 - 2024. All rights reserved.