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

时间:2010-06-15 01:12:40

标签: c# .net visual-studio-2010 visual-studio

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


在工作中,我们拥有一个包含80多个项目的C#解决方案。在VS 2008中,我们使用宏来在解决方案中的项目无法构建时立即停止编译(请参阅此问题以获取VS 2005和VS 2008的几个选项:Automatically stop Visual C++ 2008 build at first compile error?)。

在VS 2010中可以这样做吗?我们发现在VS 2010中,宏不起作用(至少我无法让它们工作),因为看起来环境事件不会在VS 2010中触发。

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

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

感谢。

3 个答案:

答案 0 :(得分:28)

(您现在可以download this as an extension,如果您不想自己构建它)

此答案仅适用于VS2010(似乎公平:])。我放了the source up on my github page。在构建之前,您需要install the 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");
        };
    }
}

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

答案 1 :(得分:6)

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

答案 2 :(得分:2)

查看我的回复here

我知道这可能会有点晚,但是如果对任何人都有用,那么他们应该安装扩展VSColorOutput

然后转到Tools => Options => VSColorOutput => General =>将Stop Build on First Error设置为true

希望这可以帮助您进行调试!