sous appsettings dans le noeud appsetting c#

J'utilise l'application.fichier de configuration créé avec une application console et je peux lire le val1 du key1 en utilisant le ConfigurationSettings.AppSettings["key1"].ToString()

<configuration>  
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    </startup>  
    <appSettings>
        <add key="key1" value="val1" />
        <add key="key2" value="val2" />  
    </appSettings> 
</configuration>

Mais j'ai trop de clés et de valeurs que je veux les catégoriser.

J'ai trouvé quelque chose qui est difficile à utiliser dans mon application puisque je veux accéder aux clés d'une manière similaire à celle ci-dessus

Affichage de tous les nœuds et impossible de lire un nœud sans obtenir tous les nœuds

Par exemple ce que je veux faire:

<appSettings>
    <Section1>
        <add key="key1" value="val1" />
    </Section1>
    <Section2>
        <add key="key1" value="val1" />
    <Section2>
</appSettings>

Et s'il existe un moyen d'y accéder en utilisant ConfigurationSettings.AppSettings["Section1"].["key1"].ToString()

30
demandé sur Cedric 2013-02-11 16:34:19

2 réponses

Vous pouvez ajouter des sections personnalisées dans l'application.config sans écrire de code supplémentaire. Tout ce que vous avez à faire est de "déclarer" une nouvelle section dans configSections node comme ça

<configSections>
      <section name="genericAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </configSections>

Et puis vous pouvez définir cette section en la remplissant avec des clés et des valeurs:

  <genericAppSettings>
      <add key="testkey" value="generic" />
      <add key="another" value="testvalue" />
  </genericAppSettings>

Pour obtenir la valeur d'une clé de cette section, vous devez ajouter System.Configuration dll comme référence à votre projet, Ajouter using et utiliser GetSection méthode. Exemple:

using System.Collections.Specialized;
using System.Configuration;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("genericAppSettings");

            string a = test["another"];
        }
    }
}

Bonne chose est que vous pouvez facilement faire des groupes de sections si vous avez besoin ce:

<configSections>
    <sectionGroup name="customAppSettingsGroup">
      <section name="genericAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 // another sections
    </sectionGroup>
</configSections>

  <customAppSettingsGroup>
    <genericAppSettings>
      <add key="testkey" value="generic" />
      <add key="another" value="testvalue" />
    </genericAppSettings>
    // another sections
  </customAppSettingsGroup>

Si vous utilisez des groupes, pour accéder aux sections, vous devez y accéder en utilisant le format {group name}/{section name}:

NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("customAppSettingsGroup/genericAppSettings");
64
répondu Konrad Gadzina 2013-02-11 13:19:32

AFAIK vous pouvez implémenter une section personnalisée en dehors des appsettings. Par exemple, les frameworks comme Autofac et SpecFlow utilisent ce type de sessions pour prendre en charge leur propre schéma de configuration. Vous pouvez jeter un oeil sur Cet article MSDN pour comprendre comment faire cela. Espérons que cela aide.

0
répondu Ikaso 2013-02-11 12:46:48