Recherche…


AppSettings from ConfigurationSettings dans .NET 1.x

Usage déconseillé

La classe ConfigurationSettings était le moyen original de récupérer les paramètres d'un assembly dans .NET 1.0 et 1.1. Il a été remplacé par la classe ConfigurationManager et la classe WebConfigurationManager .

Si vous avez deux clés portant le même nom dans la section appSettings du fichier de configuration, la dernière est utilisée.

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationSettings.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            string twoKeys = ConfigurationSettings.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

Lire les AppSettings à partir de ConfigurationManager dans .NET 2.0 et versions ultérieures

La classe ConfigurationManager prend en charge la propriété AppSettings , qui vous permet de continuer à lire les paramètres de la section appSettings d'un fichier de configuration de la même manière que celle prise en charge par .NET 1.x.

app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="keyName" value="anything, as a string"/>
    <add key="keyNames" value="123"/>
    <add key="keyNames" value="234"/>
  </appSettings>
</configuration>

Program.cs

using System;
using System.Configuration;
using System.Diagnostics;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            string keyValue = ConfigurationManager.AppSettings["keyName"];
            Debug.Assert("anything, as a string".Equals(keyValue));

            var twoKeys = ConfigurationManager.AppSettings["keyNames"];
            Debug.Assert("234".Equals(twoKeys));

            Console.ReadKey();
        }
    }
}

Introduction à la prise en charge d'applications et de paramètres utilisateur fortement typés depuis Visual Studio

Visual Studio aide à gérer les paramètres des utilisateurs et des applications. L'utilisation de cette approche présente des avantages par rapport à la section appSettings du fichier de configuration.

  1. Les paramètres peuvent être fortement typés Tout type pouvant être sérialisé peut être utilisé pour une valeur de paramètre.

  2. Les paramètres d'application peuvent être facilement séparés des paramètres utilisateur. Les paramètres d'application sont stockés dans un seul fichier de configuration: web.config pour les sites Web et les applications Web et app.config, renommé en tant qu'assembly .exe.config, où assembly est le nom de l'exécutable. Les paramètres utilisateur (non utilisés par les projets Web) sont stockés dans un fichier user.config dans le dossier Application Data de l'utilisateur (qui varie en fonction de la version du système d'exploitation).

  3. Les paramètres d'application des bibliothèques de classes peuvent être combinés en un seul fichier de configuration sans risque de collision de noms, car chaque bibliothèque de classes peut avoir sa propre section de paramètres personnalisés.

Dans la plupart des types de projet, le concepteur de propriétés de projet comporte un onglet Paramètres, qui constitue le point de départ de la création d'applications utilisateur et de paramètres personnalisés. Au départ, l'onglet Paramètres sera vide, avec un seul lien pour créer un fichier de paramètres par défaut. En cliquant sur le lien, vous obtenez ces modifications:

  1. Si un fichier de configuration ( app.config ou web.config ) n'existe pas pour le projet, un fichier sera créé.

  2. L'onglet Paramètres sera remplacé par un contrôle de grille qui vous permet de créer, modifier et supprimer des entrées de paramètres individuels.

  3. Dans l'Explorateur de solutions, un élément Settings.settings est ajouté sous le dossier spécial Propriétés. L'ouverture de cet élément ouvre l'onglet Paramètres.

  4. Un nouveau fichier avec une nouvelle classe partielle est ajouté sous le dossier Properties dans le dossier du projet. Ce nouveau fichier s'appelle Settings.Designer.__ (.cs, .vb, etc.) et la classe s'appelle Settings . La classe est générée par le code et ne doit donc pas être modifiée, mais la classe est une classe partielle. Vous pouvez donc étendre la classe en ajoutant des membres supplémentaires dans un fichier distinct. En outre, la classe est implémentée à l'aide du modèle Singleton, exposant l'instance singleton avec la propriété nommée Default .

Lorsque vous ajoutez chaque nouvelle entrée à l'onglet Paramètres, Visual Studio effectue ces deux opérations:

  1. Enregistre le paramètre dans le fichier de configuration, dans une section de configuration personnalisée conçue pour être gérée par la classe Settings.

  2. Crée un nouveau membre dans la classe Paramètres pour lire, écrire et présenter le paramètre dans le type spécifique sélectionné dans l'onglet Paramètres.

Lecture de paramètres fortement typés à partir de la section personnalisée du fichier de configuration

À partir d'une nouvelle classe Settings et d'une section de configuration personnalisée:

Onglet Paramètres du concepteur de propriétés de projet

Ajoutez un paramètre d'application nommé ExampleTimeout, en utilisant l'heure System.Timespan et définissez la valeur sur 1 minute:

Onglet Paramètres lors de l'ajout du paramètre d'application ExampleTimeout

Enregistrez les propriétés du projet, qui enregistre les entrées de l'onglet Paramètres, puis recrée la classe Paramètres personnalisée et met à jour le fichier de configuration du projet.

Utilisez le paramètre du code (C #):

Program.cs

using System;
using System.Diagnostics;
using ConsoleApplication1.Properties;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            TimeSpan exampleTimeout = Settings.Default.ExampleTimeout;
            Debug.Assert(TimeSpan.FromMinutes(1).Equals(exampleTimeout));

            Console.ReadKey();
        }
    }
}

Sous les couvertures

Regardez dans le fichier de configuration du projet pour voir comment l'entrée de paramétrage de l'application a été créée:

app.config (Visual Studio met à jour cela automatiquement)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="ConsoleApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <appSettings />
  <applicationSettings>
    <ConsoleApplication1.Properties.Settings>
      <setting name="ExampleTimeout" serializeAs="String">
        <value>00:01:00</value>
      </setting>
    </ConsoleApplication1.Properties.Settings>
  </applicationSettings>
</configuration>

Notez que la section appSettings n'est pas utilisée. La section applicationSettings contient une section personnalisée qualifiée par un espace de noms qui contient un élément de setting pour chaque entrée. Le type de la valeur n'est pas stocké dans le fichier de configuration. il n'est connu que par la classe Settings .

Regardez dans la classe Settings pour voir comment il utilise la classe ConfigurationManager pour lire cette section personnalisée.

Settings.designer.cs (pour les projets C #)

...
    [global::System.Configuration.ApplicationScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    [global::System.Configuration.DefaultSettingValueAttribute("00:01:00")]
    public global::System.TimeSpan ExampleTimeout {
        get {
            return ((global::System.TimeSpan)(this["ExampleTimeout"]));
        }
    }
...

Notez qu'un objet DefaultSettingValueAttribute été créé pour stocker la valeur entrée dans l'onglet Paramètres du Concepteur de propriétés de projet. Si l'entrée est manquante dans le fichier de configuration, cette valeur par défaut est utilisée à la place.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow