首页 > 解决方案 > 无法从 .NET Core 2 控制台应用程序中的 config.json 读取数据

问题描述

我有以下代码。

IConfigurationRoot config = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  .AddJsonFile("config.json", true, true)
  .Build();

string beep = config.GetSection("beep").Value;

我的config.json看起来像这样。

{ "beep": "bopp" }

当我遇到断点时,我可以看到有一个提供者,但其中的数据长度为零。我尝试了不同的方法,如config["beep"]等,但似乎无法获取值。它一直为。我正在尝试关注文档,但一定遗漏了一些东西。

标签: c#configuration.net-core

解决方案


确保 json 文件设置为复制到本博客中讨论的目录。否则,当您构建或调试配置文件时,将不会包含在内。确保在属性中更改它。

您无法访问您的配置的原因是IConfigurationRoot没有引用ConfigurationBuilder. 为确保您的配置内容将被加载,将按照以下方式做一些事情:

public static class ConfigurationProvider
{
     public static IConfiguration BuildConfiguration => new ConfigurationBuilder()
          .SetBasePath(Directory.GetCurrentDirectory())
          .AddJsonFile("appsettings.json", true, true)
          .Build();
}

以上将构建我们的配置,现在我们应该使用配置。

public static class ServiceProvider
{
     public static IServiceProvider BuildServiceProvider(IServiceCollection services) => services
          .BuildDependencies()
          .BuildServiceProvider();
}

一旦我们定义了我们的提供者,我们就可以执行以下操作,这样我们就可以通过我们IConfiguration的应用程序来访问对象。

var serviceCollection = new ServiceCollection()
     .AddSingleton(configuration => ConfigurationProvider.BuildConfiguration());

var serviceProvider = ServiceProvider.BuildServiceProvider(serviceCollection);

然后在另一个类中,您将拥有以下内容:

public class SampleContext : ISampleRepository
{
     private readonly string dbConection;

     public SampleContext(IConfiguration configuration) => configuration.GetConnectionString("dbConnection");

     ...
 }

那么我们的appsettings.json会是这样的:

{
  "ConnectionStrings": {
    "dbConnection": "..."
  }
}

以上是 json 对象的正确格式。如果你有一个嵌套对象沿着这些线:

{
     "Sample" : {
          "Api" : {
               "SampleGet" : "..."
          }
     }
}

那么你的 C# 将是:

configuration.GetSection("Sample:Api")["SampleGet"];

以上是基于您的配置和使用不在同一个顺序区域中的假设,即直接在您的主区域中。你也应该使用appsettings.json,因为这是默认的,如果我没记错的话,额外的接线更少。您的 json 也需要正确格式化。

但这肯定会奏效,如果您需要更多帮助,请告诉我,我可以向您发送一些示例控制台核心应用程序来演示用法。


推荐阅读