如何强制VS 2010跳过尚未更改的项目的“构build”?

我们的产品解决scheme拥有超过100多个项目(500 + ksloc的生产代码)。 他们大多数是C#项目,但我们也很less使用C ++ / CLI来桥接与本地代码的通信。

重build整个解决scheme需要几分钟的时间。 没关系。 如果我想重build解决scheme,我希望这真的需要一些时间。 什么是不好的完成重build后,需要时间来build立解决scheme。 想象一下,我使用完全重build,现在没有做任何改变的解决scheme,我按Build(F6或Ctrl + Shift + B)。 为什么没有变化需要35s? 在输出中,我看到它开始“build立”每个项目 – 它不执行实际的构build,但它做了一些耗费大量时间。

35秒的延迟是屁股疼痛。 是的,我可以通过不使用生成解决scheme,而只是build立项目(Shift + F6)来改善时间。 如果我在特定的testing项目上运行生成项目,我目前正在开发它将需要“仅”8 + s。 它需要我在正确的项目上运行项目构build(testing项目以确保依赖testing的代码也被构build)。 至lessReSharpertesting运行器正确地认识到,只有这个单一的项目必须build立和重新运行testing通常只包含8 + s编译。 我目前的编码是:不要触摸Ctrl + Shift + B。

testing项目的构build将花费8s,即使我没有做任何改变。 之所以花费8s,是因为它也“build立”依赖关系=在我的情况下,它“build立”了20多个项目,但是我只改变了unit testing或单一依赖项! 我不希望它触及其他项目。

有没有办法简单地告诉VS只build立一些改变了的项目和依赖于改变的项目(最好这个部分是另一个构build选项)? 我担心你会告诉我,这正是VS正在做什么,但在MS方式…

我想提高我的TDD经验,并减less编译时间(在TDD编译可以每分钟发生两次)。

为了让这个更加令人沮丧,我正在一个团队中工作,大多数开发人员在join这个团队之前曾经在Java项目上工作过。 所以你可以想象,当他们必须使用VS时,他们是如何生气的,而不是在Java中完全增量编译。 我不需要增量编译类 。 我期待着解决scheme的逐步编译。 特别是像VS 2010 Ultimate这样的产品,其价值几千美元。

我真的不想得到像这样的答案:

  • 做一个单独的解决scheme
  • 卸载不需要的项目
  • 等等

我可以在这里阅读这些答案。 那些是不可接受的解决scheme 我们并没有为VS做出这样的妥协。

默认情况下,当您运行单个项目时,Visual Studio将始终在您的solutuion中执行每个项目的构build。 即使该项目不依赖于解决scheme中的其他任何项目。

转到工具 | 选项 | 项目和解决scheme | 生成并运行,然后选中“ 仅在运行时 生成 启动项目和依赖项 ”checkbox。 从现在开始,运行项目(F5键)时,Visual Studio将只构build您的启动项目以及依赖于您的解决scheme的项目。

有没有办法简单地告诉VS只build立一些改变了的项目和依赖于改变的项目(最好这个部分是另一个构build选项)? 我担心你会告诉我,这正是VS正在做什么,但在MS方式…

不是真的(你已经理解了)。

你正在谈论一个“构build系统”。 MSVS是不是。 这是一个IDE,它恰好允许您将您的资产组织到项目和解决scheme中,而且是“构build”。 但是,这不是一个构build系统。 它永远不会是一个构build系统(长篇故事,但需要一个非常不同的技术)。

相比之下,MSVS是一个用于加速迭代开发的IDE,包括“debugging”周期(例如系统运行期间debbugger中的“step-into”和“step-over”)。 这就是MSVS“闪耀”的地方。

它不会,也永远不会像构build系统那样“闪耀”。 这不是它创造的。 而且,这可能永远不会改变(长话短说,即使微软可能会同意)。

我不是想要变得可爱,我真诚的道歉传递这个消息。 这个答案也伤害了我。

我期待着解决scheme的逐步编译。 特别是像VS 2010 Ultimate这样的产品,其价值几千美元。

MSVS是一个用于交互式debugging/开发的IDE,而不是一个构build系统(见上文)。 所以,你在一个没有devise的产品场景中进行测量,而且它可能不会按照你的要求运行。

我真的不想得到像这样的答案:

  • 做一个单独的解决scheme
  • 卸载不需要的项目
  • 等等

我可以阅读这些答案。 那些是不可接受的解决scheme 我们并没有为VS做出这样的妥协。

你的期望是合理的。 我也想要他们。 但是,MSVS并不是一款能够实现这一点的产品。

再一次,我不是想成为“可爱”的。 如果你愿意投资一个“构build系统”,你可能会发现使用类似CMake的东西来pipe理你的configuration和导出Makefiles (或其他)来执行你的“真实”构build的价值,但也可以“导出” *.vcproj*.sln文件,以便在MSVS IDE中以迭代方式和交互方式进行工作。

编辑:相反,你想要的是一个SSD(固态磁盘)为您的构build工作区获得10倍的改进速度,或RAM磁盘为100倍的速度提高生成(不开玩笑,64MB RAM上的LGA2011sockets给你一个32MB的RAM磁盘,这是我们使用的。)

你可以做的一件事是把你的应用程序分解成小的解决scheme,每个解决scheme都是一个有凝聚力的部分。 分别构build每个解决scheme 让每个解决scheme都使用它所依赖的解决scheme的输出,而不是使用源代码。

这将允许每个组件的更短的反馈周期

编辑:修改的解决scheme

此外,您将创build一个集成构build,而不是获取所有源代码,编译和testing,它将获取组件 CI构build二进制构build产品 。 这个集成的构build应该在每个成功的组件构build之后触发。

这个构build应该是一个完整构build的二进制等价物(你仍然应该每天晚上构build),但是运行时间要less很多,因为它会在组件增量后触发,不需要编译或获取任何源代码。

此外,如果您使用的企业级构build系统支持在多个代理之间分配构build的概念,则可以扩展您的工作量,并缩短完整的CI周期以缩短构build最长组件的时间,并且testing集成套件(最多)。

希望这可以帮助。

重量有点晚,但你有没有考虑过不同的构buildconfiguration?

你可以告诉visual studio不要根据构buildconfiguration来构build某些项目。

开发人员可以简单地select与其工作项目相关的configuration。

很古老的线程,但我可以说我正在遭受同样的事情的一个较小的版本,我升级到Visual Studio 2012和问题似乎已经最终被修复。 上面提到的RedGate .NET Demon解决scheme似乎目前工作得相当好。

这是一个老问题。

使用并行构build和SSD。 看到这里(我想 – 快谷歌): http : //www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx

我发现了一个工具,主要是我想要的(甚至更多): RedGate NET恶魔 。 它可能仍然是第一个版本,因为我们在我们的大解决scheme中遇到了一些问题(C ++项目的问题,切换构build目标的问题以及其他一些问题),但我真的很喜欢它。 我特别喜欢它如何试图在VS IDE中跟踪更改的文件,并只重build受影响的项目。

编辑:NET恶魔已经退休,因为它不应该需要在VS 2015年,它仍然适用于以前的版本。