Le moyen le plus simple d'avoir un fichier de configuration dans une application Windows Forms C #

88

Je suis vraiment nouveau sur .NET et je n'ai toujours pas compris le fonctionnement des fichiers de configuration.

Chaque fois que je recherche sur Google à ce sujet, j'obtiens des résultats sur web.config, mais j'écris une application Windows Forms.

J'ai compris que je devais utiliser l'espace de noms System.Configuration, mais la documentation n'aide pas.

Comment définir que mon fichier de configuration est XYZ.xml? Ou a-t-il un nom "par défaut" pour le fichier de configuration? Je n'ai toujours pas compris.

Aussi, comment définir une nouvelle section? Dois-je vraiment créer une classe qui hérite de ConfigurationSection?

Je voudrais juste avoir un fichier de configuration avec des valeurs comme celle-ci:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Y a-t-il un moyen simple de le faire? Pouvez-vous expliquer de manière simple comment lire et écrire depuis / vers un simple fichier de configuration?

Fabio Gomes
la source
1
Quelle est votre version de .NET? Pour la version 2.0 et supérieure, il existe une méthode très mignonne appelée Paramètres.
Thomas du
1
@Seven c'était une faute de frappe mais cela pourrait signifier "Expliquez avec un exemple" :)
Fabio Gomes

Réponses:

121

Vous souhaitez utiliser un App.Config.

Lorsque vous ajoutez un nouvel élément à un projet, il y a quelque chose appelé fichier de configuration des applications. Ajoutez ça.

Ensuite, vous ajoutez des clés dans la section configuration / paramètres de l'application

Comme:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Accédez aux membres en faisant

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Cela fonctionne dans .NET 2 et supérieur.

qui
la source
2
En fait, cela fonctionne dans toutes les versions de .NET, à partir de la v1.0. La nouvelle classe dans .NET 2.0 est ConfigurationManager.
Mike Dimmick
4
J'utilise personnellement l'onglet «Paramètres» sur les «Propriétés de l'application» (Framework 2.0 uniquement) car Visual Studio génèrera des propriétés fortement typées pour vos paramètres. Ils peuvent également inclure des paramètres "Utilisateur" qui sont en lecture / écriture au moment de l'exécution.
Adrian Clark le
@Mike ouais j'avais le sentiment que c'était le cas, mais je n'étais pas trop sûr. Je n'ai pas beaucoup travaillé avec 1.
qui
26
Notez que le ConfigurationSettingsest obsolète, utilisez System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF
16
A noter également, pour utiliser System.Configuration.ConfigurationManagervotre projet a besoin d'une référence àSystem.Configuration.dll
dmeglio
66

Clarification des réponses précédentes ...

  1. Ajoutez un nouveau fichier à votre projet ( AjouterNouvel élémentFichier de configuration d'application )

  2. Le nouveau fichier de configuration apparaîtra dans l'Explorateur de solutions sous le nom App.Config .

  3. Ajoutez vos paramètres dans ce fichier en utilisant ce qui suit comme modèle

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
  4. Récupérez-les comme ceci:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
  5. Une fois construit, votre dossier de sortie contiendra un fichier appelé <assemblyname> .exe.config. Ce sera une copie du fichier App.Config . Aucun autre travail ne doit être effectué par le développeur pour créer ce fichier.

ZombieMouton
la source
1
Cela m'a été utile. Deux autres points: Lors de l'ajout du nouveau fichier au projet, le fichier de configuration de l'application a été trouvé lorsque j'ai cliqué sur le nœud Général sur le côté gauche de la boîte de dialogue. Afin d'utiliser la classe ConfigurationManager dans mon code, j'ai dû ajouter la DLL System.Configuration à mes références.
John Gilmer
28

À partir d'une lecture rapide des réponses précédentes, elles semblent correctes, mais il ne semble pas que quiconque ait mentionné les nouvelles fonctionnalités de configuration de Visual Studio 2008. Il utilise toujours app.config (copié au moment de la compilation dans YourAppName.exe.config), mais il existe un widget d'interface utilisateur pour définir les propriétés et spécifier leurs types. Double-cliquez sur Settings.settings dans le dossier "Propriétés" de votre projet.

La meilleure partie est que l'accès à cette propriété à partir du code est sécurisé - le compilateur détectera des erreurs évidentes comme une erreur de saisie du nom de la propriété. Par exemple, une propriété appelée MyConnectionString dans app.config serait accessible comme:

string s = Properties.Settings.Default.MyConnectionString;
maxfurni
la source
Cela était disponible dans VS2005.
Greg D
5
Bien, mais cela (Propriétés du projet | Paramètres) génère du code qui doit être compilé. Si vous souhaitez modifier un paramètre, vous devez publier de nouveaux binaires pour le client.
JohnL4
@ JohnL4 si ces paramètres sont dans la portée "utilisateur", vous pouvez les modifier par programme, par exempleSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits le
10

Vous devez créer un fichier App.config (très similaire à web.config ).

Vous devez faire un clic droit sur votre projet, ajouter un nouvel élément et choisir un nouveau "Fichier de configuration d'application" .

Assurez-vous d'ajouter à l'aide de System.Configuration dans votre projet.

Ensuite, vous pouvez y ajouter des valeurs:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Juste une note: selon Microsoft , vous devriez utiliser ConfigurationManager au lieu de ConfigurationSettings (voir la section des remarques):

"La classe ConfigurationSettings fournit uniquement une compatibilité descendante. Pour les nouvelles applications, vous devez utiliser la classe ConfigurationManager ou WebConfigurationManager à la place."

Nathan Koop
la source
Très utile. Résolu mon problème au T.
JCMorris
Dans Visual Studio 2015: cliquez sur Projet> Ajouter une référence. Faites défiler vers le bas à mi-chemin pour trouver System.Configuration Cliquez sur OK, puis mettez à jour la ligne de code selon le commentaire de Nathan.
Robot70
7

Le nom par défaut d'un fichier de configuration est [yourexe] .exe.config. Ainsi notepad.exe aura un fichier de configuration nommé notepad.exe.config, dans le même dossier que le programme. Il s'agit d'un fichier de configuration générale pour tous les aspects du CLR et du Framework, mais il peut contenir vos propres paramètres sous un <appSettings>nœud.

L' <appSettings>élément crée une collection de paires nom-valeur auxquelles on peut accéder en tant que System.Configuration.ConfigurationSettings.AppSettings. Cependant, il n'existe aucun moyen de sauvegarder les modifications dans le fichier de configuration.

Il est également possible d'ajouter vos propres éléments personnalisés à un fichier de configuration - par exemple, pour définir un paramètre structuré - en créant une classe qui implémente IConfigurationSectionHandleret en l'ajoutant à l' <configSections>élément du fichier de configuration. Vous pouvez ensuite y accéder en appelantConfigurationSettings.GetConfig .

.NET 2.0 ajoute une nouvelle classe, System.Configuration.ConfigurationManager qui prend en charge plusieurs fichiers, avec des remplacements par utilisateur des données par système. Il prend également en charge l'enregistrement des configurations modifiées dans les fichiers de paramètres.

Visual Studio crée un fichier appelé App.config, qu'il copie dans le dossier EXE, avec le nom correct, lorsque le projet est généré.

Mike Dimmick
la source
6

Le meilleur article (à mon humble avis) sur la configuration de l'application .NET est sur CodeProject, Unraveling the Mysteries of .NET 2.0 Configuration . Et mon prochain article préféré (plus court) sur les sections dans les fichiers de configuration .NET est Understanding Section Handlers - App.config File .

TcKs
la source
Ce n'est vraiment pas le moyen le plus simple demandé par l'utilisateur, mais percer les mystères des configurations .NET 2.0 est vraiment une excellente série d'articles.
Ricardo Amores
3

Dans Windows Forms, vous avez le app.configfichier, qui est très similaire au web.configfichier. Mais comme je vois que vous en avez besoin pour des valeurs personnalisées, je suggère d'utiliser Paramètres .

Pour ce faire, ouvrez les propriétés de votre projet, puis accédez aux paramètres. Si un fichier de paramètres n'existe pas, vous aurez un lien pour en créer un. Ensuite, vous pouvez ajouter les paramètres au tableau que vous voyez ici, ce qui générerait à la fois le code XML approprié et une classe de paramètres pouvant être utilisée pour charger et enregistrer les paramètres.

La classe de paramètres sera nommée quelque chose comme DefaultNamespace.Properties.Settings. Ensuite, vous pouvez utiliser un code similaire à:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}
configurateur
la source
2

Je suis d'accord avec les autres réponses qui vous dirigent vers app.config. Cependant, plutôt que de lire les valeurs directement depuis app.config, vous devez créer une classe utilitaire (AppSettings est le nom que j'utilise) pour les lire et les exposer en tant que propriétés. La classe AppSettings peut être utilisée pour agréger les paramètres de plusieurs magasins, tels que les valeurs de app.config et les informations de version d'application de l'assembly (AssemblyVersion et AssemblyFileVersion).

Jamie Ide
la source
1

Utilisation:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings est obsolète et est désormais considéré comme obsolète ( lien ).

En outre, la section appSettings de app.config a été remplacée par la section applicationSettings .

Comme quelqu'un l'a mentionné, vous devriez utiliser System.Configuration.ConfigurationManager ( lien ) qui est nouveau pour .NET 2.0.

Edward Manning
la source
ConfigurationSettings est obsolète et non AppSettings.
Toby
0

Quelle version de .NET et Visual Studio utilisez-vous?

Lorsque vous avez créé le nouveau projet, vous devez avoir un fichier dans votre solution appelé app.config . C'est le fichier de configuration par défaut.

Geoff
la source