web-dev-qa-db-fra.com

Configuration JSON dans l'application complète de la console .NET Framework

J'ai une application console ciblant .NET 4.7.1. J'essaie d'utiliser la configuration de base .net comme dans mon application .Net Framework. Mon `App.config est:

<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>

Et j'ai un fichier config.json dont la propriété "Copier toujours" est définie sur True. config.json ressemble à:

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

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

Ensuite, dans ma méthode main, j'essaie de lire une valeur de configuration comme:

var config = ConfigurationManager.AppSettings

Cependant, la valeur de config est toujours nulle. J'ai essayé ce qui suit:

  1. J'ai essayé de changer jsonFile en ~/config.json;
  2. J'ai essayé de donner une configuration json de valeur-clé (flat) très basique tout en définissant jsonMode sur la valeur par défaut de flat;

Mais, je ne peux pas faire fonctionner la config. Comment puis-je résoudre ce problème?

5
kovac

Je l'ai fait aussi il y a quelque temps, mais ce n'était pas seulement un vol simple. Vous pouvez utiliser les packages Microsoft Nuget Microsoft.Extensions.Configuration & Microsoft.Extensions.Configuration.Json et installez votre propre ConfigurationBuilder.

Jetez un oeil à cet article , je pense que vous devriez le terminer.

1
Waescher
  • La principale chose que je vois omise de votre question est de spécifier l'attribut "configBuilders" dans l'élément "appSettings" de votre fichier web.config: <appSettings configBuilders="SimpleJson">
  • Je ne pense pas que vous deviez supprimer l'attribut jsonMode = "Sectional".
  • Je ne pense pas que vous ayez à configurer la valeur "Copy Always" sur True pour config.json.

Voici le code qui fonctionne pour moi:

<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
Paul Schroeder

Regardez l'exemple dans code source

Vous devez ajouter dans votre section de fichier de configuration

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

Et supprimez l'attribut jsonMode = "Sectional".

Vous pouvez accéder à votre valeur en utilisant

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