Dotnet Core Azure Function(独立进程)如何为每个环境加载 appsettings.json
Dotnet Core Azure Function (Isolated process) how to load appsettings.json per environment
我正在尝试找到一种将基于环境的 appsettings.json
文件加载到 Azure 函数中的方法。
在本地工作时默认加载 local.settings.json
。但是,如果我想按照 STAGING
部署到其他环境,我会想要加载 staging.settings.json
。我查看了 Azure Function 文档,发现我需要设置 AZURE_FUNCTIONS_ENVIRONMENT
变量(此处提到:https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings#azure_functions_environment)。
一旦我设置了这个环境,我实际上如何在代码中加载 staging.settings.json
?
我正在使用带 dotnet 核心的 Azure Functions Version 3。
这是我目前未完成的样本
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();
}
根据 Documentation,您可以在 Start Up class
中更改 Env 值
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
}
public IConfiguration Configuration { get; }
private readonly IWebHostEnvironment _env;
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
Console.WriteLine(_env.EnvironmentName);
}
else if (_env.IsStaging())
{
Console.WriteLine(_env.EnvironmentName);
}
else
{
Console.WriteLine("Not dev or staging");
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
您可以像这样在 ConfigureAppConfiguration()
块中加载 json
文件:
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);
var config = builder.Build();
};
但是,如果您要部署到 Azure 功能,它们有自己的配置部分,您可以在其中指定您的设置并将它们设置为特定于插槽(这意味着您可以为登台和生产设置不同的设置)。在这种情况下,您要做的就是将其添加到构建器中,它应该从该配置页面中提取设置:
builder.AddEnvironmentVariables()
所以你最终会得到这样的结果:
builder
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
这将在本地与开发人员和 Azure 一起工作。您应该避免复制这些 json 文件,并尽可能选择使用 Azure App Configuration 之类的东西,因为这将使您的生活在漫长的 运行.
中变得更轻松。
我正在尝试找到一种将基于环境的 appsettings.json
文件加载到 Azure 函数中的方法。
在本地工作时默认加载 local.settings.json
。但是,如果我想按照 STAGING
部署到其他环境,我会想要加载 staging.settings.json
。我查看了 Azure Function 文档,发现我需要设置 AZURE_FUNCTIONS_ENVIRONMENT
变量(此处提到:https://docs.microsoft.com/en-us/azure/azure-functions/functions-app-settings#azure_functions_environment)。
一旦我设置了这个环境,我实际上如何在代码中加载 staging.settings.json
?
我正在使用带 dotnet 核心的 Azure Functions Version 3。
这是我目前未完成的样本
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();
}
根据 Documentation,您可以在 Start Up class
中更改 Env 值public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
}
public IConfiguration Configuration { get; }
private readonly IWebHostEnvironment _env;
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
Console.WriteLine(_env.EnvironmentName);
}
else if (_env.IsStaging())
{
Console.WriteLine(_env.EnvironmentName);
}
else
{
Console.WriteLine("Not dev or staging");
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
您可以像这样在 ConfigureAppConfiguration()
块中加载 json
文件:
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureAppConfiguration(builder =>
{
builder.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true);
var config = builder.Build();
};
但是,如果您要部署到 Azure 功能,它们有自己的配置部分,您可以在其中指定您的设置并将它们设置为特定于插槽(这意味着您可以为登台和生产设置不同的设置)。在这种情况下,您要做的就是将其添加到构建器中,它应该从该配置页面中提取设置:
builder.AddEnvironmentVariables()
所以你最终会得到这样的结果:
builder
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
这将在本地与开发人员和 Azure 一起工作。您应该避免复制这些 json 文件,并尽可能选择使用 Azure App Configuration 之类的东西,因为这将使您的生活在漫长的 运行.
中变得更轻松。