如何在Cake任务的`WithCriteria`中使用全局变量?

时间:2016-08-04 08:00:44

标签: c# cakebuild

我有许多使用WithCriteria的任务来指定何时应该运行该任务。该条件在Cake脚本的主Setup方法中建立。但是,在执行脚本时,我得到一个空引用异常...

enter image description here

如您所见,Paths属性为null,即使在我的Setup方法中我设置了该属性。

为什么会这样?

如何在WithCriteria中使用全局变量?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是因为WithCriteria重载,您在执行任务之前会对使用条件进行评估。

一般来说,在执行任务之前创建的常量/状态就可以了。

WithCriteria有两个重载,您在上面使用的documentation

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

因为它需要bool它被评估为创建的任务,如果创建状态,它将无法工作。在设置或上一个任务期间更改,以解决此更改您编码以使用one重载

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

此过载采用Func<bool>条件,该条件在任务执行之前进行评估,因此可以访问在执行任务之前创建或修改的任何状态。

因此,针对您的问题的修复只是在您的条件之前添加()=>,并且它将像这样延迟加载:

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