FailOnError не работает в пользовательских задачах NAnt - PullRequest
6 голосов
/ 20 октября 2010

У меня есть пользовательская задача NAnt для целей тестирования, и я хотел бы отменить процесс сборки NAnt, если задача не удалась. Я создал пользовательский ErrorTask:

[NAnt.Core.Attributes.TaskName("errorTask")]
public class ErrorTask : NAnt.Core.Task
{
    public ErrorTask()
    {
        FailOnError = true;
    }

    protected override void ExecuteTask()
    {
        Log(NAnt.Core.Level.Error, "Error!");
    }
}

Вот что у меня есть в файле сборки NAnt:

<target name="errorTarget"> 
    <errorTask failonerror="true" />
    <errorTask failonerror="true" />
</target>

В результате (build.log) у меня есть:

errorTarget:
[errorTask] Error!
[errorTask] Error!
BUILD SUCCEEDED - 2 non-fatal error(s), 0 warning(s)
Total time: 0 seconds.

Итак, я вижу, что вторая задача также запущена, но я хотел бы отменить ее, потому что первый вызов возвращает «Ошибка!». Не могли бы вы помочь мне исправить это?

Кроме того, я предполагаю, что нет необходимости жестко кодировать значение FailOnError, его должно быть достаточно, чтобы использовать только атрибут failonerror в скрипте сборки, но он не работает для меня в любом случае.

Спасибо.

1 Ответ

7 голосов
/ 20 октября 2010

Вы должны позволить исключению всплыть из функции ExecuteTask. После выписки из журнала добавьте эту строку:

throw new BuildException("Something terrible has happened!");
...