{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中配置它们。
谢谢。
(您现在可以 将此作为扩展下载,如果你不想自己建造它)
这个答案只在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,你可以进行调整。 如果你有任何关于修改代码的问题,请告诉我。
编辑: 现在看Will比我先说了,VS2010有一个插件可以做到这一点,还有更多。VSCommands 2010,通过 http:/vscommands.comfeatures。
查看我的回复 此处.
我知道这可能是有点晚了,但如果它可以帮助任何人,那么他们应该安装的扩展 VSColorOutput
然后去 Tools
=> Options
=> => VSColorOutput
=> => => General
=> Set Stop Build on First Error
到 true
.
希望对大家有所帮助,祝大家调试愉快!