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

标签 c# cakebuild

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

enter image description here

如您所见,Paths 属性为 null,即使在我的 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(()=>
{
});

关于c# - 如何在 Cake 任务的 `WithCriteria` 中使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761679/

相关文章:

c# - 我们如何使用 Cake build 对安全的 NuGet 服务器进行身份验证?

c# - 如何使用 Cake 执行 git clone 操作

c# - Cake Build - 将 NuGet 包更新到最新版本

cakebuild - 启用并行 MSBuild 的 Cake

c# - 使用 Cake 从网络驱动器安装 Nuget 包

C# 从 CPP 调用未知数量的参数的 CPP 函数

c# - .net 远程处理 : Update already serialized objects

c# - 延迟几秒多次更新 Textview 文本

C# wpf UnitTesting View 模型

c# - 处理异步函数的空响应的正确方法是什么?