使用手动添加的 settings.json 文件到 dotnet core 控制台应用程序时,Configuration.GetSection("SectionName") 始终为 null

thi*_*per 5 c# .net-core

我正在尝试将 settings.json 文件手动添加到 .net core 2.1 控制台应用程序。因此,我将这些 NuGet 包添加到项目中:

Microsoft.扩展.配置

Microsoft.Extensions.Configuration.FileExtensions

Microsoft.Extensions.Configuration.Json

appsettings.json并像这样创建文件:

{
  "Section1": {
    "Prop1": "value",
    "Prop2": 300
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,我尝试从设置文件中获取值,如下所示:

var builder = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

_configuration = builder.Build();
var section = _configuration.GetSection("Section1");//section.Value is null
var test = _configuration.GetSection("Section1:Prop1");//it returns the proper value
var model = section as Section1Model;
Run Code Online (Sandbox Code Playgroud)

但是,section.Valuenull,因此,modelnull。如果我尝试获取类似的值,_configuration.GetSection("Section1:Prop1")它会返回正确的值。另外,如果我打电话_configuration.GetSection("Section1).GetChildren()它,它会返回一组设置。我做错了什么?

PS:我保证将设置文件复制到bin文件夹中

Jer*_*ert 3

ConfigurationBuilder只返回通用IConfiguration实例。如果您想要一个强类型模型,则必须首先对其进行绑定。有几种方法可以做到这一点 - Microsoft 自己的实现位于Microsoft.Extensions.Configuration.Binder. ConfigurationBinder然后,您可以通过以下扩展方法以多种方式访问​​静态类IConfiguration

var model = _configuration.GetSection("Section1").Get<Section1Model>();
Run Code Online (Sandbox Code Playgroud)

奇怪的是,没有扩展方法可以直接将节放入对象中,但编写一个很容易。

如果您使用依赖注入(Microsoft.Extensions.DependencyInjectionMicrosoft.Extensions.Options.ConfigurationExtensions),则会有一个.Configure<Section1Model>()扩展方法来注册此绑定。