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

问题描述 投票:43回答:3

{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中配置它们。

谢谢。

c# .net visual-studio-2010 visual-studio
3个回答
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");
        };
    }
}

...其中 BuildError 是上面定义的一个regex,你可以进行调整。 如果你有任何关于修改代码的问题,请告诉我。


6
投票

编辑: 现在看Will比我先说了,VS2010有一个插件可以做到这一点,还有更多。VSCommands 2010,通过 http:/vscommands.comfeatures。


1
投票

查看我的回复 此处.

我知道这可能是有点晚了,但如果它可以帮助任何人,那么他们应该安装的扩展 VSColorOutput

然后去 Tools => Options => => VSColorOutput => => => General => Set Stop Build on First Errortrue.

希望对大家有所帮助,祝大家调试愉快!

© www.soinside.com 2019 - 2024. All rights reserved.