VS2010-如何在第一个compi上自动停止编译

{rant}首先,我想说这不是重复的。 我之前曾问过这个问题,但是当不是这个问题时,它就被关闭了。 这个问题是VS 2010的特定问题,是VS 2008中所谓重复工作的答案,而VS 2010中不是(至少对我或我认识的人而言)。 因此,在关闭重复项之前,请仔细阅读问题并自己尝试答案,看看它是否确实有效。 道歉的道歉,但没有明显的方法联系已关闭问题或重新开放的SO警察。 {/ rant}


在工作中,我们有一个包含80多个项目的C#解决方案。 在VS 2008中,一旦解决方案中的项目无法生成,我们就使用宏来停止编译(有关VS 2005和VS 2008的几个选项,请参阅此问题:在第一个编译错误时自动停止Visual C ++ 2008生成吗?)。

在VS 2010中可以做同样的事情吗? 我们发现,在VS 2010中,宏不起作用(至少我无法使它们起作用),因为在VS 2010中似乎没有触发环境事件。

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

请仅回答VS 2010。 如果这些宏能够正常工作,那么将对如何为VS 2010配置宏进行详细说明。

谢谢。

2个解决方案
28 votes

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

此答案仅在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");
        };
    }
}

...其中BuildError是您可以调整的上述正则表达式。 如果您对修改代码有任何疑问,请告诉我。

Noah Richards answered 2020-08-12T00:07:49Z
6 votes

编辑:现在看,将在这一方面击败我-对于VS2010,有一个可以执行此操作的加载项,还有很多其他功能。 VSCommands 2010,通过[http://vscommands.com/features/]

Koob answered 2020-08-12T00:08:10Z
translate from https://stackoverflow.com:/questions/3041982/vs2010-how-to-automatically-stop-compile-on-first-compile-error