代码之家  ›  专栏  ›  技术社区  ›  Ben Robbins

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

  •  42
  • Ben Robbins  · 技术社区  · 14 年前

    {RANT} 首先,我想说这不是复制品 . 我以前问过这个问题,但当它不存在时,它会以副本的形式关闭。 这个问题是针对2010年的 对所谓的重复工作的答案在2008年,而不是在2010年(至少不是对我或任何我认识的人)。所以在你结束重复的东西之前,你呢? 阅读 仔细回答问题 尝试 你自己看看答案是否有效。为咆哮道歉,但没有明显的方式联系到警察,关闭或重新打开这个问题。{/rAN}}


    在工作中,我们有一个超过80个项目的C解决方案。在vs 2008中,我们使用宏在解决方案中的项目无法生成时立即停止编译(有关vs 2005&vs 2008的几个选项,请参见此问题: Automatically stop Visual C++ 2008 build at first compile error? )

    与2010年相比,有没有可能做到这一点?我们发现在Vs2010中宏不起作用(至少我不能让它们起作用),因为在Vs2010中环境事件似乎不会触发。

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

    请回答vs 2010。如果宏确实有效,那么应该详细解释如何为Vs2010配置宏。

    谢谢。

    2 回复  |  直到 11 年前
        1
  •  28
  •   Noah Richards    14 年前

    (现在你可以 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 是上面定义的您可以调整的regex。如果您对修改代码有任何疑问,请告诉我。

        2
  •  6
  •   Koob    14 年前

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