0

我想使用 Azure Web App 中定义的用于生产环境的应用程序设置: 请参阅此处

当前使用文件为正确的环境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 文件中的设置。

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

4

1 回答 1

1

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

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

我不确定为什么从 JSON 中删除它们会导致错误,但我有理由相信,简单地删除ConfigureAppConfiguration调用应该会让一切按预期工作。

于 2019-04-04T16:00:54.677 回答