Cake 脚本 Alias / Addin 的最基本示例是什么?
What's bare minimum example of and Cake script Alias / Addin?
我正在查看为 Cake 创建我自己的插件以扩展 DSL,文档有点缺乏。
创建 Cake 插件脚本别名的最低要求是什么?
插件只是打包为 NuGet 程序包的常规 .NET 程序集,事实上,通常您可以引用几乎任何 .NET 程序集。
别名在常规程序集之外增加了什么:
- 向 Cake DSL 添加方法,使其在 Cake 脚本中全局可用
- 命名空间导入(无需 using 语句即可使类型可用)
- 访问蛋糕核心classes/features
最小别名实现是扩展 Cake.Core.ICakeContext which has the Cake.Core.Annotations.CakeAlias 属性的扩展方法。
所以最小的实现是,创建一个 .NET 程序集,添加对 Cake.Core nuget 包的引用并添加一个 class,如下所示:
public static class HelloWorldAliases
{
[CakeMethodAlias]
public static void HelloWorld(this ICakeContext context)
{
context.Log.Information("Hello {0}", "World");
}
}
要测试别名,您可以通过 #reference directive or if you packaged it via the #addin 指令加载程序集。
然后,您可以使用 HelloWorld()
在脚本中调用您的别名,ICakeContext 可以省略,因为它由 Cake 核心引擎自动提供。
示例"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
。
打包插件并发布到 nuget 后,您可以使用 #addin 指令通过包 ID 引用它,示例:
#addin "HelloWorld"
HelloWorld();
我正在查看为 Cake 创建我自己的插件以扩展 DSL,文档有点缺乏。
创建 Cake 插件脚本别名的最低要求是什么?
插件只是打包为 NuGet 程序包的常规 .NET 程序集,事实上,通常您可以引用几乎任何 .NET 程序集。
别名在常规程序集之外增加了什么:
- 向 Cake DSL 添加方法,使其在 Cake 脚本中全局可用
- 命名空间导入(无需 using 语句即可使类型可用)
- 访问蛋糕核心classes/features
最小别名实现是扩展 Cake.Core.ICakeContext which has the Cake.Core.Annotations.CakeAlias 属性的扩展方法。
所以最小的实现是,创建一个 .NET 程序集,添加对 Cake.Core nuget 包的引用并添加一个 class,如下所示:
public static class HelloWorldAliases
{
[CakeMethodAlias]
public static void HelloWorld(this ICakeContext context)
{
context.Log.Information("Hello {0}", "World");
}
}
要测试别名,您可以通过 #reference directive or if you packaged it via the #addin 指令加载程序集。
然后,您可以使用 HelloWorld()
在脚本中调用您的别名,ICakeContext 可以省略,因为它由 Cake 核心引擎自动提供。
示例"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
。
打包插件并发布到 nuget 后,您可以使用 #addin 指令通过包 ID 引用它,示例:
#addin "HelloWorld"
HelloWorld();