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

Mic*_*out 8 cakebuild

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

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

我想创建这样的东西:

var context = BuildContext.FromArguments();
Run Code Online (Sandbox Code Playgroud)

为此,我需要获取当前ICakeContext的一个实例.我相信的原因是,蛋糕脚本中定义的所有方法都成为ICakeContext可能继承自定义的方法,CakeContext因此可以调用它的所有(扩展)方法,但是一旦定义了类,它就变成了一个嵌套类,再也无法获得好帮手了Argument<T>(name, defaultValue).

我希望我可以做任何ICakeContext.Current或简单地传递thisBuildContext.FromArguments(this)或类似的东西.

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

所以,问题是:我如何得到当前的参考ICakeContext

Pat*_*son 13

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

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

来自Task:

Task("MyTask")
  .Does(ctx =>
{
    BuildContext.FromArguments(ctx);
});
Run Code Online (Sandbox Code Playgroud)

来自Setup/ Teardown:

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

Teardown(ctx =>
{
    BuildContext.FromArguments(ctx);
});
Run Code Online (Sandbox Code Playgroud)

来自TaskSetup/ TaskTeardown:

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

TaskTeardown(ctx =>
{
    BuildContext.FromArguments(ctx);
});
Run Code Online (Sandbox Code Playgroud)

从外部脚本范围:

#load "somefile.csx"

BuildContext.FromArguments(Context);
Run Code Online (Sandbox Code Playgroud)

  • 为什么选择downvote?自从我在Cake中编写代码后,我就是PREEEEETTY,确定它是正确的...... (7认同)