【发布时间】:2018-10-02 13:13:07
【问题描述】:
我们正在使用 .NET Framework 4.6,目前有一个包含我们大部分应用程序的单体 DLL。它有大约 700k 行代码。每当我们进行更改时,都需要一分钟多的时间来重新编译。如果可能,我们希望加快速度。
一种选择是将单体应用程序分解为多个对等程序集,其中任何一个都不会相互依赖(项目之间共享代码的单个通用程序集除外)。因此,如果更改仅限于单个程序集,编译器只需重新编译这个较小的 DLL。此外,这些对等程序集可以并行编译,同样有可能减少编译时间。
其他人认为 .NET Core 2.x 的新“增量构建”功能可以从根本上增加单体架构的构建时间,这意味着编译器只能重建单体架构中发生变化的部分,而忽略其余的。
真的是这样吗,或者这不是新的增量构建功能的工作原理?
或者有人对缩短编译时间的最佳方法有任何其他建议吗?
【问题讨论】:
-
“一种选择是将整体分解为多个对等程序集,因此如果更改仅限于单个程序集,编译器只需重新编译这个较小的 DLL。”不要那么肯定。我在一个项目中工作时这样做非常糟糕,以至于由于依赖关系而导致单个更改意味着重新编译 5 个项目并且花费了 3 多分钟。它甚至没有 50k LOC
-
我想这里的关键词是“peer”——我们提议将单体分解成的所有程序集都不会相互依赖。它们将是编译树中的叶子。所以我的假设是对对等点的更改应该与其他对等点隔离,因此只需要重新编译对等点本身。这不正确吗?你能分享更多关于你的经历吗?
-
这就是为什么我说它出错了:) 只要他们没有依赖关系,你应该没问题
-
@MikeChamberlain:就其价值而言,您在这里提出的建议对我来说听起来完全标准。我们有几个巨大的应用程序,由(有时)数百个单独的程序集组成,没有 Camilo 暗示的构建问题。
-
增量构建功能与否,如果单体应用有不相关的“组件”,我觉得它们应该被移动到单独的组件中,只需通过SOLID's S。但是,据我了解,“无依赖场景”似乎不太可能,即使在这种情况下,我仍然认为可以应用 SOLID 原则来提高应用程序的性能、结构和维护。
标签: c# .net compilation