我知道如何通過#load
包含其他.csx
文件。但是,擴展方法必須在頂級類中定義,並且嵌套該類,因此它不是頂級的,並且該函數會引發編譯錯誤。如何在沒有嵌套類的情況下在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();
}
正如您所見,常規擴展方法之間的唯一區別是您不需要自己將它們包裝在靜態類中。
當我讀到這些時,我說:「如果這樣做,我會吃我的帽子。」然後它工作。謝天謝地,我沒戴帽子。 – Deane
很高興我能幫助解決消化不良問題;) – Slawek