4

我正在考虑为 Cake 创建我自己的插件来扩展 DSL,文档有点缺乏。

创建 Cake 插件脚本别名的最低要求是什么?

4

1 回答 1

5

插件只是打包为 NuGet 包的常规 .NET 程序集,事实上,您几乎可以引用任何 .NET 程序集。

别名在常规程序集之外添加的内容:

  • 向 Cake DSL 添加方法,使其在 Cake 脚本中全局可用
  • 命名空间导入(无需 using 语句即可使类型可用)
  • 访问 Cake Core 类/功能

最小的别名实现将是扩展具有Cake.Core.Annotations.CakeAlias属性的Cake.Core.ICakeContext的扩展方法。

所以一个最小的实现是,创建一个 .NET 程序集,添加对Cake.Core nuget 包的引用并添加一个如下所示的类:

public static class HelloWorldAliases
{
        [CakeMethodAlias]
        public static void HelloWorld(this ICakeContext context)
        {
             context.Log.Information("Hello {0}", "World");
        }
}

要测试您的别名,您可以通过#reference 指令加载您的程序集,或者如果您通过#addin指令打包它。然后,您可以使用ICakeContext
在脚本中调用您的别名,因为它是由 Cake 核心引擎自动提供的。HelloWorld()

示例“HelloWorld”蛋糕脚本:

#reference "HelloWorld.dll"
HelloWorld();

如果您有任何要为用户自动导入的命名空间,那么您可以使用扩展方法的CakeNamespaceImport属性来执行此操作,例如:

public static class HelloWorldAliases
{
        [CakeMethodAlias]
        [CakeNamespaceImport("MyNameSpace.Common")]
        public static void HelloWorld(this ICakeContext context)
        {
             context.Log.Information("Hello {0}", "World");
        }
}

现在可以使用任何类型的输入,MyNameSpace.Common而无需using MyNameSpace.Common在脚本中添加 a。

打包插件并发布到 nuget 后,您可以使用#addin指令通过包 ID 引用它,例如:

#addin "HelloWorld"
HelloWorld();
于 2016-08-02T23:40:22.357 回答