【问题标题】:How to load multiple config files in .Net Core如何在 .Net Core 中加载多个配置文件
【发布时间】:2022-01-28 21:47:52
【问题描述】:

我想在 .Net 核心中间件的循环中从一个文件夹中加载多个配置文件。

我知道我们可以通过将它们命名为 appSettings.json 来加载一个或多个配置文件,如提到的 here

但就我而言,如果我有多个配置文件夹,并且每个文件夹都有多个配置文件要最初加载。而且,如果我开始命名要加载的每个文件夹中的每个文件,那将是很多行且更混乱。我正在寻找循环加载所有配置文件夹。

如果需要更多信息,请询问。 谢谢

【问题讨论】:

  • 您目前如何加载配置文件?您是使用WebHost.CreateDefaultBuilder 默认值还是使用您自己的代码?另外,文件是否应该按特定顺序加载?
  • 是的,我使用的是 WebHost.CreateDefaultBuilder 默认值。到目前为止,我还没有加载所有内容,但这就是目标。无序不讲究

标签: c# asp.net-core configuration-files


【解决方案1】:

您可以使用something like Directory.EnumerateFilesConfigureAppConfiguration 实现此目的。下面是一个示例:

WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .ConfigureAppConfiguration(configurationBuilder =>
    {
        foreach (var jsonFilename in Directory.EnumerateFiles("/path/to/jsons", "*.json", SearchOption.AllDirectories))
            configurationBuilder.AddJsonFile(jsonFilename);
    })
    .Build();

ConfigureAppConfiguration 的调用允许向配置系统添加其他提供程序。在这里,我们只是将在 /path/to/jsons 目录(和子目录)中找到的所有 *.json 文件添加为额外的配置源。

【讨论】:

  • 完成此操作后,如何提取值? Configuration.GetSection("类型").Get();仅从原始 appconfig.json 文件中获取值。
  • @Markus 看看文档herehere。附加文件中的值应优先,因此您的方案中可能存在其他问题。随意打开一个新问题并在此处链接到它。
  • 它实际上确实使用了第二个文件的值。我想问题是两个文件中的部分名称相同。但我需要它们相同,并且它们的内容合并。我找到了this,它只是试图回避这个问题。
  • @Markus 是的,你不能合并这些值。以后的提供者会覆盖早期提供者的值。
【解决方案2】:

好吧,我不得不通过 ConfigurationBuilder 类的扩展方法来解决这个问题。 希望对有需要的人有所帮助。

 public static IConfigurationBuilder AddMultipleJsonFiles(this IConfigurationBuilder configurationBuilder, string path, string prefix)
    {
        string[] files = System.IO.Directory.GetFiles(path, prefix + "-*.json");

        foreach (var item in files)
        {
            configurationBuilder.AddJsonFile(item);
        }
        return configurationBuilder;
    }

还有;

 var builder = new ConfigurationBuilder().AddMultipleJsonFiles(Directory.GetCurrentDirectory()+ "/Configurations/", "service");
            _configuration = builder.Build();

【讨论】:

    【解决方案3】:

    我正在使用 .NET 6 开发 ASP.NET Core Web App MVC & API。没有 startup.cs,而是 program.cs。因此,我尝试添加 builder.Configuration.AddJsonFile("myJsonFile.json"),它对我有用。

    在 program.cs 中,

    var builder = WebApplication.CreateBuilder(args);
    
    
    // Add services to the container.
    builder.Services.AddControllersWithViews();
    builder.Configuration.AddJsonFile("myJsonFile.json");
    
    var app = builder.Build();
    ...
    

    【讨论】:

      猜你喜欢
      • 2018-04-05
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2019-04-26
      • 2011-01-28
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多