Как я могу использовать глобальные переменные в `WithCriteria` моих задач Cake?

У меня есть ряд задач, которые используют WithCriteria, чтобы указать, когда эта задача должна быть запущена. Этот критерий установлен в основном методе Setup скрипта Cake. Однако при выполнении скрипта я получаю исключение нулевой ссылки...

введите здесь описание изображения

Как видите, свойство Paths имеет значение null, хотя в моем методе Setup я устанавливаю это свойство.

Почему это?

Как я могу использовать глобальные переменные в моем WithCriteria?


person Gary Ewan Park    schedule 04.08.2016    source источник


Ответы (1)


Проблема, с которой вы столкнулись, заключается в том, что с перегрузкой WithCriteria вы используете критерии, которые оцениваются до выполнения задачи.

В общем, это нормально с константами/состоянием, созданными до выполнения задачи.

WithCriteria имеет две перегрузки: одну, которую вы используете выше.

public static CakeTaskBuilder<T> WithCriteria(
       this CakeTaskBuilder<T> builder,
       bool criteria
)

Поскольку он принимает bool, он оценивается как созданные задачи, которые не будут работать, если состояние создается и изменяется во время установки или предыдущих задач, чтобы решить это изменение, вы кодируете, чтобы использовать ниже перегрузка

public static CakeTaskBuilder<T> WithCriteria(
       this CakeTaskBuilder<T> builder,
       Func<bool> criteria
)

Эта перегрузка принимает критерии Func<bool>, которые оцениваются непосредственно перед выполнением задачи, поэтому она имеет доступ к любому состоянию, созданному или измененному до выполнения задачи.

Таким образом, исправление вашей проблемы состоит в том, чтобы просто добавить ()=> перед вашими критериями, и он будет лениво загружаться следующим образом:

Task("Test-NUnit")
    .WithCriteria(()=>DirectoryExists(parameters.Paths.Directories.NUnitTestResults))
    .Does(()=>
{
});
person devlead    schedule 04.08.2016