Azure Functions - 共享类

20
我希望在我的Azure Functions中使用一些共享类,以避免重复代码。
我尝试创建一个空的C#函数,并在函数内部创建类,然后使用以下代码将其导入到其他函数中: #r "../Shared/Class.cs"
4个回答

31

首先,将您的共享代码放置在函数应用程序目录的根目录下的文件夹中(例如,“Shared”)。假设我将共享的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}");
}

查看此处的帮助页面:此处以获取更多信息。默认情况下,该目录中的文件不会被跟踪更改。如果您想确保在该目录中的文件更改时,您的函数将拾取这些更改并重新编译,您可以将您的“共享”目录添加到host.json中的watchDirectories列表中。例如:

{
    "watchDirectories": [ "Shared" ]
}

我如何在我的wwwroot文件夹上创建共享文件夹?我有FTP访问权限,但只有只读模式。 - Luís Fura
1
按照此帮助页面上的说明,使用Kudu访问函数应用程序的文件系统。您也可以按照那里描述的方式使用App Service Editor。 - mathewc
成功了!谢谢! - Luís Fura
@LuísFura 如果这个回答解决了您的问题,请接受该帖子 :) - lindydonna
能否仅部署共享代码? - Pintu

6

这篇链接的博客仅仅描述了将.NET类库发布为Function App的替代方式,"适用于那些认为类库更适合他们应用程序的客户"。然而,工具还没有准备好,"你可以通过对项目进行一些手动调整来尝试预编译函数"。感谢您分享这些链接,但我不同意您无条件地认为这是"构建C#项目最现代和高效的模式"。 - Michael Freidgeim
事实上,我本可以更加谨慎地措辞并给出适当的背景。更具体地说,在使用 CSX 脚本在门户中创建 Azure Function App 时,如果使用多个共享类和 NuGet 依赖项,随着 Function App 变得越来越复杂,这很快就会变成一个挑战。原帖似乎刚开始处理这些挑战。因此,许多人发现将 FunctionApp 作为 ASPNET Web 应用程序启动具有许多优势。这现在是 Microsoft 推荐的做法,至少有一位博主提到了这一点,有关详细信息可以在上面的链接中找到。 - solvingJ

4
让我用更通俗易懂的方式回答这个问题,考虑到Azure Functions是新的且尚未有适当的文档。我们一步一步来。
  1. 您需要进入Azure功能的“平台功能”部分。

    enter image description here

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

    enter image description here

  3. 接下来,导航到工具->Zip Push Deploy

    enter image description here

  4. 接下来,在根文件夹内创建一个名为“Shared”的文件夹,如Microsoft文档中所建议的:

    enter image description here


在这个文件夹里,你也可以创建额外的文件夹和类(如果需要),比如,如果你想在 Azure 函数之间重复使用模型类,则可以创建一个名为“Models”的额外文件夹并将所需的类放在那里。

enter image description here

在创建了 *.csx 文件之后,您可以编辑并放置您的代码,然后保存:enter image description here 然后通过使用 #load 加载它来在 Azure 函数中重用该类:enter image description here
注意:
另一种方法是使用Visual Studio和Microsoft DevOps CI/CD。这样做会更加直接和容易。

0

当在Visual Studio中工作并寻找一种方法在函数应用程序内共享一些C#脚本文件时,可以这样做:

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

请注意,您应该将共享文件夹中的文件的“复制到输出目录”属性设置为“始终复制”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接