C# 如何强制VS 2010跳过“;“建立”;包含';你没变吗?

C# 如何强制VS 2010跳过“;“建立”;包含';你没变吗?,c#,.net,visual-studio-2010,build,tdd,C#,.net,Visual Studio 2010,Build,Tdd,我们的产品解决方案有100多个项目(500多个生产代码)。大多数都是C#项目,但我们也很少使用C++/CLI来桥接与本机代码的通信 重建整个解决方案需要几分钟。那很好。如果我想重新构建解决方案,我希望它确实需要一些时间。不好的是在完全重建后构建解决方案所需的时间。假设我使用了完全重建,现在没有对解决方案做任何更改,我按Build(F6或Ctrl+Shift+B)。如果没有变化,为什么需要35秒?在输出中,我看到它开始“构建”每个项目——它不执行真正的构建,但它做了一些耗费大量时间的事情 35秒的

我们的产品解决方案有100多个项目(500多个生产代码)。大多数都是C#项目,但我们也很少使用C++/CLI来桥接与本机代码的通信

重建整个解决方案需要几分钟。那很好。如果我想重新构建解决方案,我希望它确实需要一些时间。不好的是在完全重建后构建解决方案所需的时间。假设我使用了完全重建,现在没有对解决方案做任何更改,我按Build(F6或Ctrl+Shift+B)。如果没有变化,为什么需要35秒?在输出中,我看到它开始“构建”每个项目——它不执行真正的构建,但它做了一些耗费大量时间的事情

35秒的延迟真是太痛苦了。是的,我可以通过不使用构建解决方案而只使用构建项目(Shift+F6)来缩短时间。若我在我目前正在进行的特定测试项目上运行BuildProject,它将“仅”花费8+s。它要求我在正确的项目上运行project build(测试项目以确保相关的测试代码也是构建的)。至少ReSharper测试运行程序正确地认识到只有这个项目必须构建,并且重新运行测试通常只包含8+s编译。我目前的编码是:不要按Ctrl+Shift+B

即使我不做任何更改,测试项目构建也需要8秒。之所以需要8秒,是因为它还“构建”了依赖关系=在我的例子中,它“构建”了20多个项目,但我只对单元测试或单个依赖关系进行了更改!我不想让它影响到其他项目

有没有一种方法可以简单地告诉VS只构建完成了一些更改的项目和依赖于更改的项目(最好将此部分作为另一个构建选项)?我担心你会告诉我,这正是VS正在做的,但在MS的方式

我想提高我的TDD体验,减少编译时间(在TDD中,编译可以每分钟进行两次)

为了使这一点更加令人沮丧,我在一个团队中工作,大多数开发人员在加入这个团队之前都从事Java项目。因此,您可以想象,当他们必须使用VS而不是Java中的完全增量编译时,他们是多么愤怒。我不需要。我期望解决方案的增量编译。特别是像VS 2010 Ultimate这样花费数千美元的产品

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

  • 单独制定解决方案
  • 卸载您不需要的项目
  • 等等

我能读懂这些答案。这些都是不可接受的解决办法。我们不会花钱让VS做这样的妥协。

默认情况下,当您运行单个项目时,Visual Studio将始终执行解决方案中每个项目的构建。即使该项目不依赖于解决方案中的所有其他项目

转到工具|选项|项目和解决方案|构建并运行并选中“仅在运行时构建启动项目和依赖项”框。
从现在开始,当运行您的项目(F5键)时,Visual Studio将只构建您的启动项目以及它所依赖的解决方案中的那些项目。

您可以做的一件事是将应用程序分解为多个小解决方案,每个解决方案都是一个有凝聚力的部分。分别构建每个解决方案。让每个解决方案使用它所依赖的解决方案的输出,而不是使用源代码

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

编辑:修改的解决方案

此外,您将创建一个集成构建,它将获得组件CI构建的二进制构建产品,而不是获取所有源代码、编译和测试。此集成构建应在每次成功构建组件后触发运行

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

此外,如果您使用支持在多个代理之间分发构建的概念的企业级构建系统,您将能够扩展您的工作,并将整个CI周期缩短到构建最长组件和测试集成套件(最多)所需的时间

希望这有帮助

有没有一种方法可以简单地告诉VS只构建一些 已完成更改,并且项目依赖于更改的项目 (最好将此部分作为另一个构建选项)?我担心你会告诉我 告诉我,这正是VS正在做的,但在MS的方式

不是真的(你已经明白了)

你说的是“构建系统”。MSV并非如此。它是一个IDE,恰好允许您将资产组织到项目和解决方案中,是的,还可以“构建”。但是,它不是一个构建系统。它永远不会是一个构建系统(说来话长,但需要一种非常不同的技术)

相比之下,MSVS是一个用于加速迭代开发的IDE,包括“调试”周期(例如,在系统运行期间在debbugger中“逐步进入”和“逐步结束”)。这就是MSV“闪耀”的地方

作为一个构建系统,它不会也永远不会“闪耀”。这不是它被创造出来的目的。而且,这一点可能永远不会改变(说来话长,就连微软也可能同意)

我不是想装出可爱的样子,我为传递这个消息而真诚地道歉。这个答案也伤害了我

我期望解决方案的增量编译。尤其是在 像VS 2010 Ultimate这样的产品需要几千美元

MSVS是用于交互式调试/开发的IDE,而不是构建系统(见上文)。因此,您正在产品场景中测量它