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

问题描述:

我知道如何通过#load包含其他.csx文件。但是,扩展方法必须在顶级类中定义,并且嵌套该类,因此它不是顶级的,并且该函数会引发编译错误。如何在没有嵌套类的情况下在Azure函数中共享扩展方法?

如何使用共享代码而不会嵌入函数的后编译类中?

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

当正在了解有一个简单的窍门是在独立的CSX文件扩展名的方法,仍然让他们在顶层类中定义:

这里的run.csx文件

#load "extensions.csx" 

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

和扩展.csx

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

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

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

+0

当我读到这些时,我说:“如果这样做,我会吃我的帽子。”然后它工作。谢天谢地,我没戴帽子。 – Deane

+0

很高兴我能帮助解决消化不良问题;) – Slawek

你有一个选择是在一个单独的c#类中创建你的扩展方法,并将它添加到你的函数中。

docs

如果您需要引用私有程序集,您可以将 汇编文件上传到bin文件夹相对于你的函数,并使用文件名 引用它(如r组成“ MyAssembly.dll程序“)。有关如何上传文件到您的文件夹功能 信息,请参阅包管理

的 以下部分。

+0

我不想使用程序集。我只是在'.csx'文件中定义了一个静态类。我可以包含它,但它不会编译,因为类是嵌套的。 – Deane