我可以在我的 Cake 构建脚本中获取对当前 ICakeContext 的引用吗?
Can I get a reference to the current `ICakeContext` in my Cake build script?
我正在重构一个 Cake 构建脚本,并决定引入一个 class 来保存一些构建设置,这些设置在全局范围内经常被传递 and/or。
一些设置来自参数,并使用 Argument<T>(string name, string defaultValue)
语法设置。
我想创建这样的东西:
var context = BuildContext.FromArguments();
为此,我需要获取当前 ICakeContext 的一个实例。我认为这样做的原因是蛋糕脚本中定义的所有方法都成为自定义 ICakeContext
的方法,它可能继承自 CakeContext
因此可以调用它的所有(扩展)方法,但是一旦你定义一个 class,它变成一个嵌套的 class,不再可以访问像 Argument<T>(name, defaultValue)
.
这样的好帮手
我希望我可以做 ICakeContext.Current
或者像 BuildContext.FromArguments(this)
或类似的东西那样简单地传递 this
。
但是关键字 this
在 Cake 脚本的那个级别是不允许的(不知道为什么,顶层是静态方法吗?
所以,问题是:如何获得对当前 ICakeContext
的引用?
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);
我正在重构一个 Cake 构建脚本,并决定引入一个 class 来保存一些构建设置,这些设置在全局范围内经常被传递 and/or。
一些设置来自参数,并使用 Argument<T>(string name, string defaultValue)
语法设置。
我想创建这样的东西:
var context = BuildContext.FromArguments();
为此,我需要获取当前 ICakeContext 的一个实例。我认为这样做的原因是蛋糕脚本中定义的所有方法都成为自定义 ICakeContext
的方法,它可能继承自 CakeContext
因此可以调用它的所有(扩展)方法,但是一旦你定义一个 class,它变成一个嵌套的 class,不再可以访问像 Argument<T>(name, defaultValue)
.
我希望我可以做 ICakeContext.Current
或者像 BuildContext.FromArguments(this)
或类似的东西那样简单地传递 this
。
但是关键字 this
在 Cake 脚本的那个级别是不允许的(不知道为什么,顶层是静态方法吗?
所以,问题是:如何获得对当前 ICakeContext
的引用?
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);