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

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


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

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

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

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

Благодарю.

2 ответа

Решение

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

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

Изменить: Теперь посмотрите, что побьет меня на этом - для VS2010 есть надстройка, которая может сделать это, и многое другое. VSCommands 2010, через http://vscommands.com/features/

Проверьте мой ответ здесь.

Я знаю, что это может быть немного поздно, но если это кому-то поможет, им следует установить расширение VSColorOutput.

Затем перейдите в Tools => Options => VSColorOutput => General => Установить Stop Build on First Error к true.

Надеюсь, это поможет, удачной отладки!

Другие вопросы по тегам