我有许多使用WithCriteria的任务来指定何时应该运行该任务。该条件在Cake脚本的主Setup
方法中建立。但是,在执行脚本时,我得到一个空引用异常...
如您所见,Paths属性为null,即使在我的Setup
方法中我设置了该属性。
为什么会这样?
如何在WithCriteria
中使用全局变量?
答案 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(()=>
{
});