如何在不嵌套 类 的情况下在 Azure Functions 中共享扩展方法?

How do you have shared extension methods in Azure Functions without nesting classes?

我知道如何通过 #load 包含其他 .csx 文件。但是,扩展方法必须在顶层 class 中定义,并且 #load 嵌套 class,因此它不是顶层并且该函数会引发编译错误。

如何使用共享代码而不将其嵌套在函数的 post 编译的 class 中?

您可以选择在单独的 c# class 中创建扩展方法并将其添加到您的函数中。

来自docs

If you need to reference a private assembly, you can upload the assembly file into a bin folder relative to your function and reference it by using the file name (e.g. #r "MyAssembly.dll"). For information on how to upload files to your function folder, see the following section on package management

.

为了正确包含 Azure 函数的扩展方法,您可以像在所有其他情况下一样使用#load,关于扩展方法需要位于顶层的要求的唯一区别是 class使它们成为顶级方法:)。当 Azure Function 获取 csx 文件的编译内容被包装在 auto-created class 中时,这就是为什么它抱怨以常规 c# 方式编写的扩展方法将嵌套在 auto-created class.

当明白这一点时,有一个简单的技巧可以在单独的 csx 文件中拥有扩展方法,并且仍然在 top-level class:

中定义它们

这里是 run.csx 文件

#load "extensions.csx"

public static void Run(TimerInfo timer, TraceWriter log)
{
    log.Info("test".MyToUpperExtension());
}

和extensions.csx

static string MyToUpperExtension(this string str)
{
    return str.ToUpper();
}

static string MyToLowerExtension(this string str)
{
    return str.ToLower();
}

如您所见,常规扩展方法之间的唯一区别是您不需要自己将它们包装在静态 class 中。