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

问题描述:

我有一些任务使用WithCriteria来指定何时应该运行该任务。该标准在Cake脚本的主要Setup方法中建立。然而,在执行脚本时,我得到一个空引用异常......如何在我的Cake任务的`WithCriteria`中使用全局变量?

enter image description here

正如你看到的,路径属性为空,即使我Setup方法中,我设置该属性。

这是为什么?

如何在我的WithCriteria内使用全局变量?

您遇到的问题是因为使用WithCriteria重载,您使用的标准在任务执行前被评估。

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

随着WithCriteria有两个重载的one你使用上述

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

,因为它需要一个bool的任务创建它的评估,如果创建&设置或以前期间发生变化状态,这是行不通的任务,要解决这个改变你的代码使用below超载

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

这种过度负荷需要Func<bool>标准Wh是在执行任务之前对其进行评估,因此可以访问任务执行前创建或修改的任何状态。

因此,对于你的问题的解决方法是只需添加()=>您的标准之前,这将是懒加载这样的:

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

感谢,工程完全按照说明! –