【问题标题】:Override appsettings.json on Azure using ASPNETCORE_ENVIRONMENT使用 ASPNETCORE_ENVIRONMENT 在 Azure 上覆盖 appsettings.json
【发布时间】: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 中获取值。

  1. 谁能指出如何为 ASP Core 2.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


【解决方案1】:

你不应该从appsettings 读取环境。环境在机器级别设置并在启动时读取。

你有两个选择:

  1. 对于本地机器,在launch.settings中设置环境变量

  2. 在 azure 中,在应用服务配置中将其设置为环境变量

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

【讨论】:

  • “你不应该从 appsettings 中读取环境” – 你的意思是什么?
  • 我已直接在 Azure 门户中的配置 > 应用设置下设置了 ASPNETCORE_ENVIRONMENT。
  • 对不起,我看错了你的问题。这应该会有所帮助:stackoverflow.com/questions/53161103/…
  • 另外,使用默认的 web builder 就足够了,因为它会根据环境设置应用正确的 appsettings 文件。
【解决方案2】:

我现在可以正常工作了:

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

为什么 ASPNETCORE_ENVIRONMENT 在 web.config 中?有一个关于这个here的讨论。最终,我为解决这个问题所做的就是为 web.config 添加转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多