2016-09-16 54 views
10

我想在我的Azure函數上使用一些共享類來不重複代碼。Azure函數 - 共享類

我試圖創建一個空的C#功能和創建函數內部的類,然後導入到其他功能搭配:

#r "../Shared/Class.cs"

回答

18

首先,把你的共享代碼文件夾中的根你的Function App目錄(例如「共享」)。假設我在該文件夾中放置了共享的Message.csx類(例如完整路徑D:\home\site\wwwroot\Shared\Message.csx)。

包含這個給你的函數使用#load命令:

#load "..\Shared\Message.csx" 

using System; 
using Microsoft.Azure.WebJobs.Host; 

public static void Run(Message message, TraceWriter log) 
{ 
    log.Info($"C# Queue trigger function processed message: {message.Id}"); 
} 

請參閱幫助頁here以獲取更多信息。默認情況下,該目錄中的文件將不會被跟蹤以進行更改。如果你想確保當那個目錄中的文件改變你的函數將會接受改變並重新編譯,你可以將你的「Shared」目錄添加到host.jsonwatchDirectories列表中。例如: -

{ 
    "watchDirectories": [ "Shared" ] 
} 
+0

如何在我的wwwroot文件夾上創建共享文件夾?我有FTP訪問權限,但只能使用只讀模式。 –

+1

按照[本幫助頁面]上的說明(https://azure.microsoft.com/zh-cn/documentation/articles/functions-reference)使用** Kudu **訪問您的功能應用程序的文件系統。您也可以使用此處描述的App Service Editor。 – mathewc

+0

作品!謝謝! –

2

由於Azure的職能範圍內的變化率,這已不再是C#的功能建議的方法(見Azure Functions Tools Roadmap)。請參考以下博客文章,瞭解Visual Studio中用於構建C#項目的最現代高效的模式,並以通常在C#中執行的方式獲取共享DLL的所有優點。

https://blogs.msdn.microsoft.com/appserviceteam/2017/03/16/publishing-a-net-class-library-as-a-function-app/

https://github.com/devkimchi/Precompiled-Azure-Functions-Revisited

+0

鏈接的博客僅描述將.NET類庫作爲函數應用程序發佈爲另一種方式,「對於那些認爲該類庫更適合其應用程序的客戶「。但是工具還沒有準備好,」你今天可以嘗試預編譯功能,只需對你的項目進行一些手動調整即可。「感謝您分享鏈接,但我不同意您的無條件「構建C#項目的最現代化和高效的模式」 –

+0

事實上,我可以通過給它適當的上下文更仔細地措辭。因此,更具體地說,在門戶中使用CSX腳本的Azure功能應用程序中使用多個共享類和nuget依賴關係很快成爲功能應用程序變得越來越複雜的挑戰。 OP似乎剛剛開始處理這些挑戰。因此,許多人發現以ASPNET Web Apps的形式啓動FunctionApps有很多優點。這是微軟和至少一位博主推薦的,詳細信息可以在上面的鏈接中找到,以供追求這條道路的人使用。 – solvingJ

0

從Visual Studio中工作,並尋找一種方式來您的功能應用這樣的內共享功能之間的一些C#腳本文件時間:

#load "..\Shared\MySharedCode.csx" 

請注意,您應該將'複製到輸出目錄'屬性設置爲共享文件夾中的文件'始終複製'。