为什么应将Azure功能的开发配置加载为生产配置?

时间:2019-10-15 23:41:21

标签: azure environment-variables azure-functions azure-deployment

我已将Azure功能部署到Azure。我没有在应用程序设置的任何地方或环境中的其他任何地方指定AZURE_FUNCTIONS_ENVIRONMENT为“开发”。

但是,当执行以下代码时

var configurationBuilder = new ConfigurationBuilder()
    .SetBasePath(basePath)
    .AddJsonFile("appsettings.json", true, true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, reloadOnChange: true);

$"appsettings.{env.EnvironmentName}.json"解析为“ appsettings。开发 .json”,因此将加载开发配置而不是生产配置。

当我通过Kudu查看该环境的Environment变量时,根本看不到任何对Development的引用,实际上看到WEBSITE_SLOT_NAME = Production已配置(尽管不一定与Function相关。

我的理解是,如果未指定环境,则运行时默认为生产。因此,这对我来说意味着在某个地方指定了开发。我也不知道该在哪里寻找。

问题: 是否可以在“应用程序设置”或“环境”变量中未指定的位置指定“开发”?如果是这样,在哪里?我在哪里可以找它,或者为什么要加载开发配置而不是生产配置?我应该怎么做才能明确确保生产配置已加载到生产环境中?

3 个答案:

答案 0 :(得分:0)

.NET Core为ASPNETCORE_ENVIRONMENT使用Hosting:Environmentenv.EnvironmentName环境变量。 WEBSITE_SLOT_NAME由Azure设置,表示托管应用的部署槽的名称。

答案 1 :(得分:0)

如果要更好地控制,最好在“应用程序设置”或“环境变量”中进行设置。

就您的情况而言,您应该记住在使用代码时:

.AddJsonFile("appsettings.json", true, true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", true, reloadOnChange: true);

如果appsettings.json和appsettings.development.json都存在,则第二个.AddJsonFile()方法应始终覆盖第一个.AddJsonFile()方法。

因此,如果您只是想确保它使用生产配置而不使用App设置或环境变量,只需在第二个.AddJsonFile()方法中指定您的生产配置(它是appsettings.json文件)。

答案 2 :(得分:0)

不幸的是,直到我手动指定要从“环境变量”中获取数据后,我才能使它起作用:

var environment = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT");

var configurationBuilder = new ConfigurationBuilder()
    .SetBasePath(basePath)
    .AddJsonFile("appsettings.json", true, true)
    .AddJsonFile($"appsettings.{environment}.json", true, reloadOnChange: true);

要求在Azure环境的“应用程序设置”中指定值:

enter image description here

在launchSettings.json文件中为

"environmentVariables": {
  "AZURE_FUNCTIONS_ENVIRONMENT": "Development"
}