如何在 Cake Tasks 的“WithCriteria”中使用全局变量?

How can I utilize global variables within the `WithCriteria` of my Cake Tasks?

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

如您所见,路径 属性 为空,即使在我的 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> 标准,该标准在任务执行之前进行评估,因此可以访问在任务执行之前创建或修改的任何状态。

因此,您的问题的解决方法是在您的标准之前添加 ()=>,它将像这样延迟加载:

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