Подтвердить что ты не робот

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

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


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

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

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

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

Спасибо.

4b9b3361

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

Ответ 2

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