如何在 .Net Core 中加载多个配置文件

Sye*_*yed 8 c# configuration-files asp.net-core

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

我知道我们可以通过命名他们像appSettings.json中放入一个或多个配置文件所提到这里

但是在我的情况下,如果我有多个配置文件夹,并且每个文件夹都有多个要初始加载的配置文件。如果我开始命名要加载的每个文件夹中的每个文件,那将是很多行和混乱。我希望循环加载所有配置文件夹。

请询问是否需要更多信息。谢谢

Kir*_*kin 10

您可以使用类似 Directory.EnumerateFiles和来实现这一点ConfigureAppConfiguration。下面是一个示例:

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

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

  • 完成此操作后,如何提取值?Configuration.GetSection( "Type" ).Get&lt;Type&gt;(); 仅从原始 appconfig.json 文件获取值。 (2认同)

小智 5

好吧,我必须使用 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;
    }
Run Code Online (Sandbox Code Playgroud)

并且;

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


小智 5

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

在程序.cs中,

var builder = WebApplication.CreateBuilder(args);


// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Configuration.AddJsonFile("myJsonFile.json");

var app = builder.Build();
...
Run Code Online (Sandbox Code Playgroud)