完整的.NET Framework控制台应用程序中的JSON配置

问题描述 投票:2回答:3

我有一个针对.NET 4.7.1的控制台应用程序。我正在尝试在我的.Net Framework应用程序中使用.net核心配置。我的`App.config是:

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
  </configSections>
  <configBuilders>
    <builders>
    <add name="SimpleJson"
         jsonFile="config.json"
         optional="false"
         jsonMode="Sectional"
         type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" /></builders>
  </configBuilders>

我有一个文件config.json,其属性“Copy Always”设置为Trueconfig.json看起来像:

  {
  "appSettings": {
    "setting1": "value1",
    "setting2": "value2",
    "complex": {
      "setting1": "complex:value1",
      "setting2": "complex:value2"
    }
  },

  "connectionStrings": {
    "mySpecialConnectionString": "Dont_check_connection_information_into_source_control"
  }
}

然后,在我的main方法中,我尝试读取配置值,如:

var config = ConfigurationManager.AppSettings

但是,config的值始终为null。我尝试了以下方法:

  1. 试图将jsonFile改为~/config.json;
  2. 尝试给出一个非常基本的键值(平面)json配置,同时将jsonMode设置为默认值flat;

但是,无法让配置工作。我该如何解决这个问题?

c# .net json configuration
3个回答
0
投票

我不久前做过这个,但它不只是一个单行。您可以使用Microsoft Nuget Packages Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json并设置您自己的ConfigurationBuilder。

看看this article,我想你应该完成它。


0
投票

我不确定默认设置现在如何工作,但我会告诉你我是如何在.net核心中加载配置文件的。

在CreateDefaultBuilder之后和UseStartup之前添加如下的ConfigureAppConfiguration方法:

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                    //HostingEnvironment = hostingContext.HostingEnvironment;

                    //config.SetBasePath(HostingEnvironment.ContentRootPath);
                    var workingDirectory = AppContext.BaseDirectory; // HostingEnvironment.ContentRootPath // Directory.GetCurrentDirectory()
                    foreach (var file in Directory.GetFiles(workingDirectory, "*_config.json"))
                    {
                        config.AddJsonFile(file);//);Path.GetFileName(file));
                    }
                })
                .UseStartup<Startup>();

在您的情况下,如果您的配置未加载:

config.AddJsonFile(Path.Combine(workingDirectory, "config.json"));

这会将.config文件添加到应用程序中。在ConfigureServices方法中,我们可以按部分访问此配置,并使用此值填充一些类属性。

services.Configure<CommonAppSettings>(this.Configuration.GetSection("appSettings"));

直接访问:

var value1 = this.Configuration.GetSection("appSettings").GetValue(typeof(string), "setting1", "defaultValueIfNotFound");

连接字符串:

//I'm not sure about "ConnectionStrings" section case sensitivity.
var connectionString = this.Configuration.GetConnectionString("mySpecialConnectionString");

有用的链接:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.1


0
投票

看看source code中的例子

您应该添加配置文件部分

<appSettings configBuilders="SimpleJson">
<add key="AppConfiguration:Key1" value="will be replaced by value in json file" />
</appSettings>

并删除jsonMode =“Sectional”属性。

您可以使用访问您的价值

var key1 = ConfigurationManager.AppSettings["AppConfiguration:Key1"];

0
投票
  • 我在你的问题中忽略的主要内容是在web.config文件的“appSettings”元素中指定“configBuilders”属性:<appSettings configBuilders="SimpleJson">
  • 我认为你不必删除jsonMode =“Sectional”属性。
  • 我认为您不必为config.json配置“始终复制”设置为True。

这是适合我的代码:

<configBuilders>
    <builders>
    <add name="SimpleJson" jsonFile="~\developer_config.json" optional="false" jsonMode="Sectional" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" />
    </builders>
</configBuilders>
<appSettings configBuilders="SimpleJson">
...
</appSettings>

0
投票

如果你想在.Net Core中使用config json文件,你可以安装NuGets Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json然后初始化配置

IConfigurationRoot configuration = new ConfigurationBuilder()
.AddJsonFile("config.json", optional: true)
.Build();

在此之后,您可以使用.Net Core中的配置。例如:

{
  "myConfig": {
    "item1": "config options"
  }
}

对于这个json你会打电话:

var configItem = configuration["myConfig:item1"];
© www.soinside.com 2019 - 2024. All rights reserved.