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

swd*_*don 10 .net c# configuration json asp-net-config-builders

我有一个面向 .NET 4.7.1 的控制台应用程序。我正在尝试在我的 .Net Framework 应用程序中使用 .net core 之类的配置。我的`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>
Run Code Online (Sandbox Code Playgroud)

我有一个文件config.json,其属性“始终复制”设置为True. config.json好像:

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

  "connectionStrings": {
    "mySpecialConnectionString": "Dont_check_connection_information_into_source_control"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

var config = ConfigurationManager.AppSettings
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 7

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

IConfigurationRoot configuration = new ConfigurationBuilder()
.AddJsonFile("config.json", optional: true)
.Build();
Run Code Online (Sandbox Code Playgroud)

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

{
  "myConfig": {
    "item1": "config options"
  }
}
Run Code Online (Sandbox Code Playgroud)

对于此 json,您将调用:

var configItem = configuration["myConfig:item1"];
Run Code Online (Sandbox Code Playgroud)

  • 由于您需要使用已弃用的 Microsoft 扩展版本,这可能意味着 Microsoft 的 .NET Framework 不再完全支持此方法。由于 OP 特别要求 .NET Framework 解决方案,我否决了这个答案。 (5认同)
  • 但这两个 nuget 包依赖于 .netCore 3.1 它们适用于 .net Framework 4.6 应用程序吗? (2认同)
  • 对于 Net Framework,您必须使用版本 1.1.2,因为较新的版本不支持 Net Framework:https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/1.1.2 (2认同)

Wae*_*her 4

我前段时间也这样做过,但这不仅仅是一句俏皮话。您可以使用 Microsoft Nuget Packages Microsoft.Extensions.Configuration&Microsoft.Extensions.Configuration.Json设置您自己的 ConfigurationBuilder。

看看这篇文章,我想你应该能看完。

  • 对于 Net Framework,您必须使用版本 1.1.2,因为较新的版本不支持 Net Framework:https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/1.1.2 (2认同)