我可以在Cake构建脚本中获得对当前`ICakeContext`的引用吗?

时间:2017-12-25 12:06:05

标签: cakebuild

我正在重构一个Cake构建脚本,并决定引入一个类来保存一些构建设置,这些构建设置可以在全局范围内传递和/或存在。

某些设置来自参数,并使用Argument<T>(string name, string defaultValue)语法设置。

我想创建这样的东西:

var context = BuildContext.FromArguments();

为此,我需要获取当前ICakeContext的一个实例。我相信的原因是,蛋糕脚本中定义的所有方法都成为自定义构建的ICakeContext的方法,可能继承自CakeContext,因此可以调用其所有(扩展)方法,但是一旦你定义一个类,它成为一个嵌套类,不再能访问Argument<T>(name, defaultValue)这样的好帮手。

我希望我可以ICakeContext.Current或者只是传递this BuildContext.FromArguments(this)或类似的东西。

但是在Cake脚本的那个级别不允许使用关键字this(不确定为什么,顶级是静态方法?

所以,问题是:如何获得对当前ICakeContext

的引用

1 个答案:

答案 0 :(得分:11)

this不起作用的原因是由于Roslyn实现脚本的方式,并且脚本的外部范围中没有this的概念。

您可以通过几种不同的方式访问上下文。

来自Task

Task("MyTask")
  .Does(ctx =>
{
    BuildContext.FromArguments(ctx);
});

来自Setup / Teardown

Setup(ctx =>
{
    BuildContext.FromArguments(ctx);
});

Teardown(ctx =>
{
    BuildContext.FromArguments(ctx);
});

来自TaskSetup / TaskTeardown

TaskSetup(ctx =>
{
    BuildContext.FromArguments(ctx);
});

TaskTeardown(ctx =>
{
    BuildContext.FromArguments(ctx);
});

来自外部脚本范围:

#load "somefile.csx"

BuildContext.FromArguments(Context);