Dotnet Core Azure Function(隔离进程)如何加载每个环境的 appsettings.json

kkd*_*er7 2 azure-functions

我正在尝试找到一种将基于环境的appsettings.json文件加载到 Azure Function 中的方法。

在本地工作时,local.settings.json默认情况下会加载。但是,如果我想部署到其他环境中,STAGING我想加载staging.settings.json. 我浏览了Azure Function文档,发现我需要设置AZURE_FUNCTIONS_ENVIRONMENT变量(此处提到:https: //learn.microsoft.com/en-us/azure/azure-functions/functions-app-settings#azure_functions_environment)。

一旦我设置了这个环境,我该如何staging.settings.json在代码中加载它呢?

我正在将 Azure Function Version 3 与 dotnet core 一起使用。

这是我当前未完成的示例

 public static async Task Main()
        {
            var host = new HostBuilder()
                .ConfigureAppConfiguration((hostBuilder, configuration) =>
                {
                      // Do I Load Json File per environment here? 
                })
                .ConfigureFunctionsWorkerDefaults((hostBuilder, worker) =>
                {
                    //Will be regestering custom middleware here 
                }) //configure middleware here
                .ConfigureServices((context, services) => // configure services for DI
                {
                    services.RegisterLogger();
                  

                })
                .Build();

            await host.RunAsync();
        }
Run Code Online (Sandbox Code Playgroud)

Dam*_*amo 5

您可以像这样在块json内加载文件:ConfigureAppConfiguration()

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureAppConfiguration(builder =>
    {
        builder.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);

        var config = builder.Build();
    };
Run Code Online (Sandbox Code Playgroud)

但是,如果您要部署到 Azure 功能,它们有自己的配置部分,您可以在其中指定您的设置并将其设置为特定于插槽(这意味着您可以为暂存和生产设置不同的设置)。在这种情况下,您所需要做的就是将其添加到构建器中,它应该从该配置页面中提取设置:

builder.AddEnvironmentVariables()

所以你最终会得到这样的结果:

builder
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
Run Code Online (Sandbox Code Playgroud)

然后,这将在本地与开发人员和 Azure 中一起使用。您应该避免复制这些 json 文件,并选择使用诸如 Azure 应用程序配置之类的文件(如果可以的话),因为从长远来看,这将使您的生活更轻松。