gpt4 book ai didi

c# - Cake 脚本 Alias/Addin 的最基本示例是什么?

转载 作者:行者123 更新时间:2023-11-30 14:49:25 28 4
gpt4 key购买 nike

我正在查看为 Cake 创建我自己的插件以扩展 DSL,文档有点缺乏。

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

最佳答案

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

别名在常规汇编之外增加了什么:

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

一个最小的别名实现是一个扩展方法,它扩展了 Cake.Core.ICakeContext其中有 Cake.Core.Annotations.CakeAlias属性。

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

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

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

“HelloWorld”蛋糕脚本示例:

#reference "HelloWorld.dll"
HelloWorld();

如果您有任何想要为用户自动导入的 namespace ,那么您可以使用 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();

关于c# - Cake 脚本 Alias/Addin 的最基本示例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38732101/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com