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

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

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

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

当理解这一点时,有一个简单的技巧可以在单独的csx文件中使用扩展方法,并且仍然在顶级类中定义它们:

这是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(); } 

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

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

来自docs

如果需要引用私有程序集,可以将程序集文件上传到相对于函数的bin文件夹中,并使用文件名引用它(例如#r“MyAssembly.dll”)。 有关如何将文件上载到function文件夹的信息,请参阅以下有关包管理的部分