{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配置它们的详细说明。
感谢。
答案 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
。
希望这可以帮助您进行调试!