VS2010 - Как автоматически остановить компиляцию на первой ошибке компиляции

{напыщенная речь} Сначала, я хотел бы сказать, что это НЕ ДУБЛИКАТ. Я задал этот вопрос ранее, но он был закрыт как дубликат, когда это не. Этот вопрос ХАРАКТЕРЕН для VS 2010 и ответы на так называемую дублирующуюся работу в VS 2008, но не в VS 2010 (по крайней мере, не для меня или любого, кого я знаю). Таким образом, перед движением, закрывая что-то, поскольку дубликат как насчет Вас считал вопрос тщательно и пробует ответ за себя и видит, работает ли он на самом деле. Извинения за напыщенную речь, но нет никакого очевидного способа связаться ТАК полиция, которая закрыла проблему, или вновь откройте ее. {/напыщенная речь}


На работе у нас есть решение C# с более чем 80 проектами. В VS 2008 мы используем макрос для остановки компиляции, как только проекту в решении не удается создать (см. этот вопрос для нескольких опций для VS 2005 и VS 2008: Автоматически остановите сборку Visual C++ 2008 года в первой ошибке компиляции?).

Действительно ли возможно сделать то же в VS 2010? То, что мы нашли, - то, что в VS 2010 макросы не работают (по крайней мере, я не мог заставить их работать), поскольку кажется, что события среды не запускают в VS 2010.

Поведение по умолчанию состоит в том, чтобы продолжиться в максимально возможной степени и отобразить список ошибок в ошибочном окне. Я рад за него остановиться или как только с ошибкой встречаются (уровень файла) или как только проекту не удается создать (уровень проекта).

Ответы для VS 2010 только. Если макросы действительно работают затем подробное объяснение того, как настроить их для VS, 2010 ценился бы.

Спасибо.

42
задан Community 23 May 2017 в 10:29
поделиться

1 ответ

(Теперь вы можете скачать это как расширение, если не хотите создавать его самостоятельно)

Этот ответ работает только в VS2010 (кажется справедливым :)). Я разместил исходники на своей странице github. Прежде чем вы сможете собрать его, вам нужно установить SDK. Как только вы это сделаете, просто возьмите полный исходник с github (включая файлы проекта) и соберите его. Вы можете установить результат в обычные экземпляры VS, найдя VSIX в результатах сборки и открыв его.

Важная часть:

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, который вы можете подправить. Если у вас есть вопросы по модификации кода, дайте мне знать.

28
ответ дан 27 November 2019 в 00:00
поделиться