我正在考虑为 Cake 创建我自己的插件来扩展 DSL,文档有点缺乏。
创建 Cake 插件脚本别名的最低要求是什么?
插件只是打包为 NuGet 包的常规 .NET 程序集,事实上,您几乎可以引用任何 .NET 程序集。
别名在常规程序集之外添加的内容:
最小的别名实现将是扩展具有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();