使用ASPNETCORE_ENVIRONMENT覆盖Azure上的appsettings.json

时间:2019-07-31 09:00:06

标签: c# azure asp.net-core

我有一个运行良好的ASP Core 2.2应用程序。

  • 我有一个appsettings.json
  • 我有一个appsettings.QA.json
  • 我有一个Azure应用服务,已在门户的“配置”>“应用设置”部分中添加了ASPNETCORE_ENVIRONMENT变量,并将其值设置为“ QA”。
  • 我还直接在门户的“配置”>“连接字符串”部分中添加了连接字符串。

发布到Azure应用服务时,我想用appsettings.QA.json中的值覆盖appsettings.json中的设置。我正在努力弄清应该如何配置它。

我正在通过Microsoft.Extensions.Configuration.IConfiguration实现从appsettings中读取值,该实现注入到需要此类配置的类中。

到目前为止,我有以下内容:

Program.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获取值。

  1. 有人可以指出如何为ASP Core 2.2应用程序正确配置转换吗?
  2. 我会完全以错误的方式处理此事吗?

更新

  • 由于不需要,我已按照建议删除了我的自定义代码。
  • 如果我在视图中输出@Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"),则会得到:“ QA; Development”。似乎“开发”来自web.config,其中还设置了ASPNETCORE_ENVIRONMENT。

2 个答案:

答案 0 :(得分:2)

您不应该从appsettings阅读环境。环境在计算机级别设置,并在启动时读取。

您有2个选择:

  1. 对于本地计算机,在launch.settings

  2. 中设置环境变量
  3. 天蓝色,在应用程序服务配置中将其设置为环境变量

ref:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-2.2

答案 1 :(得分:0)

我现在可以正常工作了

  • 按照@KirkLarkin和@ dee-zg的建议,从Program.cs中删除了自定义代码。
  • 从Azure门户中删除了ASPNETCORE_ENVIRONMENT设置。原因是应用程序中还有一个具有此设置的web.config。从配置读取时,似乎使用的是此版本,而不是Azure门户版本。

为什么web.config中的ASPNETCORE_ENVIRONMENT?关于此here的讨论。最终,要解决此问题,我要做的就是为web.config添加转换。