addin只是一个打包为NuGet包的常规.NET程序集,事实上你通常可以引用几乎任何.NET程序集.
别名在常规装配之外增加了什么:
最小别名实现将是扩展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");
}
}
Run Code Online (Sandbox Code Playgroud)
要测试别名,可以通过#reference指令加载程序集,或者如果通过#addin指令打包它.
然后,您可以使用HelloWorld()ICakeContext 在脚本中调用别名,因为它是由Cake核心引擎自动提供的.
示例"HelloWorld"Cake脚本:
#reference "HelloWorld.dll"
HelloWorld();
Run Code Online (Sandbox Code Playgroud)
如果您要为用户自动导入任何名称空间,则使用CakeNamespaceImport属性为扩展方法执行此操作,例如:
public static class HelloWorldAliases
{
[CakeMethodAlias]
[CakeNamespaceImport("MyNameSpace.Common")]
public static void HelloWorld(this ICakeContext context)
{
context.Log.Information("Hello {0}", "World");
}
}
Run Code Online (Sandbox Code Playgroud)
MyNameSpace.Common现在可以使用任何类型,而无需向using MyNameSpace.Common脚本添加.
一旦你打包你的插件并发布到nuget,你就可以使用#addin指令通过包id引用它,例如:
#addin "HelloWorld"
HelloWorld();
Run Code Online (Sandbox Code Playgroud)