【发布时间】:2012-01-13 22:55:55
【问题描述】:
我们产品的解决方案有 100 多个项目(500+ksloc 的生产代码)。其中大多数是 C# 项目,但我们也很少使用 C++/CLI 来桥接与本机代码的通信。
重建整个解决方案需要几分钟时间。没关系。如果我想重建解决方案,我希望它真的需要一些时间。不好的是完全重建后构建解决方案所需的时间。想象一下,我使用了完全重建,现在没有对解决方案做任何更改,我按下 Build(F6 或 Ctrl+Shift+B)。如果没有变化,为什么需要 35 秒?在输出中,我看到它开始“构建”每个项目 - 它没有执行真正的构建,但它做了一些消耗大量时间的事情。
这 35 秒的延迟真是让人头疼。是的,我可以通过不使用构建解决方案而只使用构建项目 (Shift+F6) 来缩短时间。如果我在我目前正在处理的特定测试项目上运行构建项目,它将需要“仅”8+s。它要求我在正确的项目上运行项目构建(测试项目以确保构建依赖的测试代码)。至少 ReSharper 测试运行器正确地识别出只有这个单个项目必须被构建并且重新运行测试通常只包含 8+s 编译。我目前的编码Kata是:不要碰Ctrl+Shift+B。
即使我不做任何更改,测试项目构建也需要 8 秒。它需要 8 秒的原因是因为它还“构建”了依赖项 = 在我的情况下,它“构建”了 20 多个项目,但我只对单元测试或单个依赖项进行了更改!我不希望它触及其他项目。
有没有办法简单地告诉 VS 只构建完成了一些更改的项目以及依赖于已更改项目的项目(最好将这部分作为另一个构建选项)?我担心你会告诉我,这正是 VS 正在做的事情,但以 MS 方式......
我想改善我的 TDD 体验并减少编译时间(在 TDD 中,编译可能每分钟发生两次)。
更令人沮丧的是,我在一个团队中工作,大多数开发人员在加入这个团队之前曾经从事过 Java 项目。所以你可以想象当他们必须使用VS而不是Java中的完全增量编译时,他们是如何生气的。我不需要incremental compilation of classes。我希望对解决方案进行增量编译。尤其是像 VS 2010 Ultimate 这样的价值数千美元的产品。
我真的不想得到这样的答案:
- 制作单独的解决方案
- 卸载不需要的项目
- 等
我可以阅读这些答案here。这些不是可接受的解决方案。我们不会花钱让 VS 做出这样的妥协。
【问题讨论】:
-
我认为这是非常主观的......你有 A LOT 代码,没人知道你有什么规格的机器,你有 SSD 吗? Blah blah blah ... VS2010 已经做了所有可能无法重新编译未更改的代码的事情,所以我认为您不会得到与您不想要的答案有很大不同的答案听到。你为什么不在一台超高规格的机器上测试你的编译时间(如果你能得到一台),看看它是否有帮助? Resharper 对 IDE 的速度也毫无帮助。
-
嗯,这些是我们可以做出的假设,但这并不一定意味着正确。我之前使用过 VS2010 和 SSD,我注意到大型解决方案的构建时间有了相当大的改进。也许值得在构建周期中观察 IO 性能计数器(或其他工具),以确认它是否绝对是 IO。关于硬件的其他观点你是对的。显然,您已经有了一个微调的解决方案。只是你有很多代码。您是否也尝试过未安装 ReSharper 的构建?
-
@Ladislav:您是说“几乎不能访问未更改的项目,也不能访问与我的更改无关的项目”,但让我们从 VS 的角度来看”。 VS 必须确定项目是否已更改,为此它需要扫描所有源文件以分析它们的最后修改时间(至少)。它必须这样做,并且没有内部上下文信息可以提供帮助:首先可以在外部更改文件。现在,如果您有 100 多个项目,那么我假设您在数百个文件夹中有数千个文件,并且确实需要时间来扫描它们。
-
如果你想提高你的 TDD 体验,那么你可能想看看 NCrunch 项目:ncrunch.net。 NCrunch(重新)在您键入时在后台构建和运行您的代码和测试,因此您不必停止编码、构建您的应用程序,并且仅在运行测试之后。
-
我刚刚安装了 NCrunch,我不得不说它真的很酷。它绝对有助于提高编译速度,并且即时代码覆盖是一个不错的功能。
标签: c# .net visual-studio-2010 build tdd