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配置宏进行详细说明。
谢谢。
(现在,如果您不想自己构建它,可以将其作为扩展下载。)
此答案仅在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
是您可以调整的上述正则表达式。 如果您对修改代码有任何疑问,请告诉我。
编辑:现在看,将在这一方面击败我-对于VS2010,有一个可以执行此操作的加载项,还有很多其他功能。 VSCommands 2010,通过[http://vscommands.com/features/]