【发布时间】:2019-07-31 09:00:06
【问题描述】:
我有一个运行良好的 ASP Core 2.2 应用程序。
- 我有一个 appsettings.json
- 我有一个 appsettings.QA.json
- 我有一个 Azure 应用服务,我已将 ASPNETCORE_ENVIRONMENT 变量添加到门户的配置 > 应用设置部分,并将值设置为“QA”。
- 我还在门户的配置 > 连接字符串部分直接添加了一个连接字符串。
当我发布到我的 Azure 应用服务时,我想用 appsettings.QA.json 中的值覆盖 appsettings.json 中的设置。我正在努力弄清楚应该如何配置它。
我正在通过 Microsoft.Extensions.Configuration.IConfiguration 实现从 appsettings 中读取值,该实现注入到我需要此类配置的类中。
到目前为止,我有以下内容:
程序.cs:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
})
.UseStartup<Startup>();
当应用在 Azure 中运行时,它会从门户中获取连接字符串并使用它。但是,当我从 appsettings 中读取值时,我总是从 appsettings.json 而不是 appsettings.QA.json 中获取值。
- 谁能指出如何为 ASP Core 2.2 应用程序正确配置转换?
- 我是不是完全走错了路?
更新
- 我已按照建议删除了上面的自定义代码,因为它不需要。
- 如果我在我看来输出
@Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"),我会得到:“QA;Development”。似乎“开发”来自同样设置了 ASPNETCORE_ENVIRONMENT 的 web.config。
【问题讨论】:
-
“但是,当我从 appsettings 中读出一个值时”——你到底是怎么做到的?你能展示一下你是如何使用配置的吗?
-
只是为了排除最简单的可能性 - 您是否确认应用服务中存在
appsettings.QA.json?如果足够简单,可能值得更改为optional: false,以确保文件被拾取。此外,您的示例中并不真正需要ConfigureAppConfiguration,因为这是使用WebHost.CreateDefaultBuilder时的默认设置。最后,正如@poke 所问,您究竟是如何读取此配置值的? -
@KirkLarkin appsettings.QA.json 肯定已发布到 Azure 应用服务。我正在通过注入到我需要的类中的 Microsoft.Extensions.Configuration.IConfiguration 实现读出值。
标签: c# azure asp.net-core