我已将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相关。
我的理解是,如果未指定环境,则运行时默认为生产。因此,这对我来说意味着在某个地方指定了开发。我也不知道该在哪里寻找。
问题: 是否可以在“应用程序设置”或“环境”变量中未指定的位置指定“开发”?如果是这样,在哪里?我在哪里可以找它,或者为什么要加载开发配置而不是生产配置?我应该怎么做才能明确确保生产配置已加载到生产环境中?
答案 0 :(得分:0)
.NET Core为ASPNETCORE_ENVIRONMENT
使用Hosting:Environment
和env.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环境的“应用程序设置”中指定值:
在launchSettings.json文件中为
"environmentVariables": {
"AZURE_FUNCTIONS_ENVIRONMENT": "Development"
}