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

Ben*_*ins 42 .net c# visual-studio-2010 visual-studio

{rant} 首先我想说这不是重复的.我之前已经问过这个问题,但是当它不是时,它会被重复关闭.这个问题是针对VS 2010的特定问题以及VS 2008中所谓的重复工作的答案,而不是VS 2010中的答案(至少不适合我或我认识的任何人).因此,在您将某些内容视为重复内容之前,请仔细阅读该问题并亲自尝试答案,看看它是否真的有效.为咆哮道歉,但没有明显的方式联系SO警察关闭问题或重新开放.{/咆哮}


在工作中,我们有一个包含80多个项目的C#解决方案.在VS 2008中,我们使用宏来在解决方案中的项目无法构建时立即停止编译(请参阅此问题以获取VS 2005和VS 2008的几个选项:首次编译错误时自动停止Visual C++ 2008构建?).

是否有可能在VS 2010中做同样的事情?我们发现在VS 2010中,宏不起作用(至少我无法使它们工作),因为看起来环境事件不会在VS 2010中触发.

默认行为是尽可能继续并在错误窗口中显示错误列表.一旦遇到错误(文件级)或项目无法构建(项目级别),我很高兴它能够立即停止.

仅限VS 2010的答案.如果宏确实有效,那么可以理解如何为VS 2010配置它们的详细说明.

谢谢.

Noa*_*rds 28

(您现在可以将其作为扩展名下载,如果您不想自己构建它)

这个答案仅适用于VS2010(似乎公平:]).我把源代码放在我的github页面上.在构建之前,您需要安装SDK.完成后,只需从github(包括项目文件)中获取完整的源代码并构建它.您可以通过在构建输出中找到VSIX并打开它来将输出安装到正常的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");
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

... BuildError上面定义的正则表达式可以调整.如果您对修改代码有任何疑问,请与我们联系.

  • @Will,谢谢,我当之无愧.回答你的问题:能够在解决方案上设置http://msdn.microsoft.com/en-us/library/microsoft.build.tasks.msbuild.stoponfirstfailure.aspx吗? (4认同)
  • @Will:我认为大卫的观点是VS2010默认情况下应该这样做,或者至少作为一种选择.在VS2010开始为C++中缺少的分号生成1000个错误之后,需要一个试图取消构建的宏并不是"我需要做的一切". (3认同)

小智 6

编辑:现在看到这将打败我 - 对于VS2010,有一个加载项可以做到这一点,还有更多.VSCommands 2010,通过http://vscommands.com/features/