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

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


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

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

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

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

Спасибо.

Ответы [ 2 ]

28 голосов
/ 15 июня 2010

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

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

6 голосов
/ 27 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...