直接使用 Azure Web App 中的应用程序设置,而不是 appsettings.Production.json

Use Application settings from Azure Web App directly, not from appsettings.Production.json

我想使用生产环境的应用程序设置,如 Azure Web 应用程序中所定义: See here

目前正在使用 appsettings*.json 文件在 Program.cs 中为正确的环境获取这些值:

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((builderContext, config) =>
        {
            IHostingEnvironment env = builderContext.HostingEnvironment;

            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
               .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
        })
        .UseStartup<Startup>()
        .Build();

这些值当前在 json 中定义,例如

"ConnectionStrings": {
    "LocalizationAdminContext": "Data Source=example;Initial Catalog=example;Integrated Security=True;MultipleActiveResultSets=True"
  },
  "DbResourceConfiguration": {
    "ConnectionString": "Data Source=example;Initial Catalog=example;Integrated Security=True;MultipleActiveResultSets=True"
  }

我试图从 appsettings.production.json 中删除这些以强制它使用 Azure 中提供的那些,但它出错了。我会认为,因为它是在 Program.cs 中设置的,所以它将始终在相关环境 json 文件中搜索设置。

如何在配置中覆盖它以使用应用程序设置?最好仅用于生产环境。

好吧,我不确定这是否真的是问题所在,但无论如何它都是无用的代码。 CreateDefaultBuilder,除其他外,配置各种配置提供程序,包括 appsettings.jsonappsettings.{environment}.json。然后它继续添加环境变量之类的东西。

充其量,您没有理由调用 ConfigureAppConfiguration,因为这些文件 已经 通过调用 CreateDefaultBuilder 添加了。但是,对于如何添加配置也有一个操作顺序:即后来添加的配置提供程序覆盖以前添加的配置提供程序。因此,通过像这样再次添加 JSON 文件,您实际上是在使它们成为包含的 last 配置提供程序,这意味着它们会覆盖 everything.我相信 Azure 中的应用程序设置是作为环境变量添加的。这通常会使它们覆盖您的 JSON 文件中的任何内容,因为环境变量提供程序是在 JSON 提供程序之后添加的。但是,您现在已经翻转了脚本,使它们被 JSON.

覆盖

我不确定为什么从您的 JSON 中删除它们会导致错误,但我有理由相信,只需删除 ConfigureAppConfiguration 调用就可以使一切按预期工作。