web-dev-qa-db-fra.com

sous appsettings dans le nœud appsetting c #

J'utilise le fichier app.config créé avec une application console et je peux lire la val1 de la clé1 à l'aide de la 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 classer.

J'ai trouvé quelque chose qui est difficile à utiliser dans mon application car je veux accéder aux clés de la même manière que celle ci-dessus

Affichage de tous les nœuds et ne peut pas 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()

35
Tony Germanos

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

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

puis vous pouvez définir cette section en la remplissant de clés et de 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, ajoutez using et utilisez la méthode GetSection. 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"];
        }
    }
}

Une bonne chose est que vous pouvez facilement créer des groupes de sections si vous en avez besoin:

<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 {group name}/{section name} format:

NameValueCollection test = (NameValueCollection)ConfigurationManager.GetSection("customAppSettingsGroup/genericAppSettings");
71
Konrad Gadzina

AFAIK, vous pouvez implémenter une section personnalisée en dehors des paramètres d'application. Par exemple, des 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 this MSDN article pour comprendre comment faire cela. J'espère que cela pourra aider.

0
Ikaso