как добиться успеха пост-сборки события Visual Studio 2010, всегда - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть событие после сборки, которое запускает nunit-console для выполнения некоторых тестов.некоторые из этих тестов терпят неудачу, что, в свою очередь, приводит к сбою события после сборки (код завершения равен числу ошибок).Я бы хотел, чтобы событие после сборки прошло успешно, независимо от кода выхода nunit-console.Как мне это сделать?Я попытался добавить операторы 'exit 0' или вызвать пакетный скрипт, который запускает тесты, а затем 'exit 0', но это не предотвращает сбой события после сборки (код выхода -1).

ОБНОВЛЕНИЕ: , как я упоминал ранее, использование выхода 0 (и выхода / b 0) не работало.поэтому, к сожалению, даже несмотря на то, что ответ, предложенный Хансом Пассантом, работает в этом конкретном сценарии (неудачная копия), он не работает в этом сценарии (неудачная монета):

"C:\libraries\nunit\nunit-2.5.7-net-2.0\bin\nunit-console.exe" $(TargetPath) /nologo /nodots /timeout=1000 /noshadow
exit /b 0

возможно, я должен упомянуть, что $ (TargetPath) относится к расположению, отличному от пути исполняемого файла nunit-console (C: \ Snaps ... \ myproject.nunit.dll), но до сих пор не причиняющего вреда.

Ответы [ 2 ]

1 голос
/ 02 января 2012

ну, наконец-то дошли до исправления. как оказалось, уровни ошибок не имеют ничего общего с этой конкретной проблемой. вместо этого формат текста, который заканчивается в окне вывода Visual Studio, кажется первостепенным ...

неудачные тесты NUnit обнаружились в окне Список ошибок Visual Studio с описанием элемента, для которого задано пространство имен и имя метода сообщения об ошибке NUnit, а для файла - загадочная строка «EXEC». если вы откроете окно вывода, та же самая строка 'EXEC' также будет присутствовать в начале сообщения об ошибке NUnit. но это не часть исходного сообщения об ошибке NUnit. Я добавил человека посередине, чтобы посмотреть, что происходит, например:

    static void Main(string[] args)
    {
        Console.WriteLine("args: " + string.Join(" ", args));
        Process p = new Process()
        {
            StartInfo = new ProcessStartInfo(@"C:\libraries\nunit\nunit-2.5.7-net-2.0\bin\nunit-console.exe", string.Join(" ", args))
            {
                UseShellExecute = false,
                RedirectStandardOutput = true
            }
        };
        int lineNumber = 0;
        p.OutputDataReceived += (s, e) =>
        {
            //if (!Debugger.IsAttached && !string.IsNullOrWhiteSpace(e.Data) && e.Data.Contains("Test Error"))
            //{
            //    Debugger.Launch();
            //}
            //string line = e.Data;
            string line = string.IsNullOrWhiteSpace(e.Data) ? string.Empty : e.Data.Replace("Test Error", "Test Critical Failure");
            Console.WriteLine("[" + (++lineNumber) + "] " + line);
        };
        p.Start();
        p.BeginOutputReadLine();
        p.WaitForExit();
        Console.WriteLine("nunit exited with code " + p.ExitCode);
        Environment.Exit(0);
    }

Я вызвал эту программу вместо nunit из события после сборки и, конечно же, при отладке было сообщение об ошибке NUnit без строки «EXEC». Кроме того, строка «EXEC» появилась еще до номеров строк, которые я теперь добавляю в тестовый вывод. когда я пропустил все строки со строкой «Test Error» или заменил «Test Error» чем-то другим, например «Test Critical Failure», сборка проекта прошла успешно. но когда я добавил следующее в событие пост-сборки проекта, оно снова не удалось, и описание элемента в окне Список ошибок Visual Studio было установлено в «foo.bar»:

echo Test Error : foo.bar

так что либо Visual Studio, либо какое-либо расширение, похоже, вмешивается в сборку и приводит к сбою, как только в окне вывода Visual Studio появляется строка с форматом «Test Error: bla.bla». затем сообщается, что все событие после сборки завершается с кодом завершения -1, даже если последняя команда события после сборки устанавливает уровень ошибки в какое-то другое значение. Теперь, чтобы быть справедливым, я не уверен, относится ли это к стандартной редакции Visual Studio 2010 или какому-либо расширению, так что на всякий случай это вся моя среда:

Microsoft Visual Studio 2010 Версия 10.0.40219.1 SP1Rel Microsoft
.NET Framework версия 4.0.30319 SP1Rel
Установленная версия: Professional

Инструменты разработчика Microsoft Office
Microsoft Visual Basic 2010
Microsoft Visual C # 2010
Microsoft Visual C ++ 2010
Microsoft Visual F # 2010
Microsoft Visual Studio 2010 Team Explorer
Microsoft Visual Web Developer 2010
Добавьте ссылку Диалог Плюс! 1,0
AlignAssignments 1.0
AutoBraceComplete 1.0
ClearCase Search 1.0
Шаблоны Crystal Reports для Microsoft Visual Studio 2010
Devart Code Compare 2.70.3
Document Well 2010 Plus 1.0.10916.0
Microsoft Visual Studio 2010 Professional - пакет обновления 1 для ENU (KB983509)
Инструменты разработчика Microsoft Visual Studio 2010 SharePoint 10.0.40219
Microsoft.VisualStudio.QuickAccess.Package 1.0
OptionsPageImpl 1.0
PowerCommands для Visual Studio 2010 1.0
QuickFind 1.0
Rational ClearCase
Visual Nunit 1.0
VSCommands 2010 3.8.0.0
FeiLoader
ObjectWizard

хорошо, так что есть обходной путь, использующий человека в середине, но если есть кто-то, кто знает какие-либо настройки или исправления Visual Studio или расширения, которые решат эту проблему, или лучшую альтернативу моему решению, Я все уши!

ОБНОВЛЕНИЕ: После отключения всех расширений и надстроек проблема сохраняется. это начинает выглядеть как нативная особенность Visual Studio.

1 голос
/ 23 декабря 2011

Используйте аргумент / b, чтобы установить уровень ошибки.Например, командная строка события после компоновки:

$(ProjectDir)test.cmd

С этим содержимым:

copy foo bar
exit /b 0

Произошло следующее:

...