Azure 函数 - 共享 类

Azure Functions - Shared classes

我想在我的 Azure Functions 上使用一些共享的 类 来避免重复代码。

我尝试创建一个空的 C# 函数并在函数内部创建 类,然后使用以下命令导入其他函数:

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

首先,将您的共享代码放入 Function App 目录根目录中的一个文件夹中(例如 "Shared")。假设我在该文件夹中放置了一个共享 Message.csx class(例如完整路径 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.json 中的 watchDirectories 列表。例如:

{
    "watchDirectories": [ "Shared" ]
}

由于 Azure Functions 的变化速度,这不再是 C# 函数的推荐方法(请参阅 Azure Functions Tools Roadmap)。请参阅以下博客文章,了解在 visual studio 中构建 C# 项目的最现代和最有效的模式,并以您通常在 C# 中执行的方式获得共享 DLL 的所有优势。

https://azure.github.io/AppService/2017/03/16/Publishing-a-.NET-class-library-as-a-Function-App.html

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

当从 Visual Studio 工作并寻找一种在 Function App 中的函数之间共享一些 C# 脚本文件的方法时,如下所示:

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

请注意,您应该将共享文件夹中文件的 'Copy to Output Directory' 属性 设置为 'Copy always'。

让我以更 human-understandable 的方式回答这个问题,考虑到 Azure Functions 是新的并且还没有适当的文档。

让我们一步一步来。

  1. 您需要转到 Azure 函数 "Platform features" 部分。

  2. 然后导航至开发工具->高级工具:

  3. 接下来,导航至 工具->Zip 推送部署

  4. 接下来,按照 Microsoft documentation 中的建议在根文件夹中创建一个名为 "Shared" 的文件夹:


在此文件夹中,您还可以创建其他文件夹,class如果需要, 例如,如果你想在 Azure 函数之间重用模型 classes,那么创建一个名为 "Models" 的额外文件夹,并将你想要的 class 放在那里。

  1. 创建 *.csx 文件后,您可以对其进行编辑并将代码放在那里并保存:

  2. 然后通过使用 #load:

    加载它,在你的 Azure 函数中重用 class


注:
另一种方法是将 Visual Studio 与 Microsoft DevOps CI/CD 结合使用。在那里做同样的事情会非常简单和容易。