VS2010 – 如何在第一次编译错误时自动停止编译

首先我想说这不是一个复制 。 以前我问过这个问题,但当它不是时,它会被重复closures。 这个问题对于VS 2010来说是特定的,对于VS 2008中所谓的重复工作的回答,而不是在VS 2010中(至less不是我或者任何我认识的人)。 所以,在你把东西作为一个重复的东西之前,你仔细阅读这个问题,然后尝试为自己的答案,看看它是否真的有效。 对这种咆哮道歉,但没有明显的方式联系SO警方,解决问题或重新打开。 {/咆哮}


在工作中,我们有一个拥有80多个项目的C#解决scheme。 在VS 2008中,当解决scheme中的项目无法构build时,我们使用macros来停止编译(有关VS 2005和VS 2008的几个选项,请参阅此问题:首先自动停止Visual C ++ 2008编译错误?

在VS 2010中可以做到这一点吗? 我们发现,在VS 2010中,这些macros不起作用(至less我不能让它们工作),因为看起来VS 2010中的环境事件不会触发。

默认行为是尽可能地继续,并在错误窗口中显示错误列表。 我很高兴,只要遇到错误(文件级别),或者一旦项目无法build立(项目级别),就立即停止。

请只有VS 2010的答案。 如果macros能够工作,那么请详细解释如何为VS 2010configuration它们。

谢谢。

(你现在可以下载这个扩展 ,如果你不想自己构build它)

这个答案只适用于VS2010(似乎公平:])。 我把源代码放在我的github页面上 。 在构build它之前,您需要安装SDK 。 一旦你完成了,只需从github(包括项目文件)中获取完整的源代码并构build它。 您可以通过在构build输出中findVSIX并将其打开,将输出安装到正常的VS实例中。

重要的部分是:

public void TextViewCreated(IWpfTextView textView) { var dte = GlobalServiceProvider.GetService(typeof(DTE)) as DTE; textView.TextBuffer.Changed += (sender, args) => { //Output window is friendly and writes full lines at a time, so we only need to look at the changed text. foreach (var change in args.Changes) { string text = args.After.GetText(change.NewSpan); if (BuildError.IsMatch(text)) dte.ExecuteCommand("Build.Cancel"); }; } } 

BuildError是一个上面定义的正则expression式,你可以调整。 如果您对修改代码有任何疑问,请告诉我。

编辑:现在看到,将击败我在这一个 – 对于VS2010有一个插件可用,可以做到这一点,还有更多。 VSCommands 2010,通过http://vscommands.com/features/