Qu'est-ce que App.config dans C # .NET? Comment l'utiliser?

183

J'ai réalisé un projet en C # .NET où mon fichier de base de données est un classeur Excel. Étant donné que l'emplacement de la chaîne de connexion est codé en dur dans mon codage, il n'y a aucun problème pour l'installer dans mon système, mais pour d'autres systèmes, il y en a.

Existe-t-il un moyen d'inviter l'utilisateur à définir un chemin une fois la configuration de l'application terminée?

Les réponses que j'ai obtenues étaient "Utiliser App.Config" ... Quelqu'un peut-il dire ce qu'est ce App.config et comment l'utiliser dans mon contexte ici?

timide
la source
4
duplication possible de À quoi sert app.config?
utilisateur

Réponses:

197

Dans sa forme la plus simple, app.config est un fichier XML avec de nombreuses sections de configuration prédéfinies disponibles et une prise en charge des sections de configuration personnalisées. Une «section de configuration» est un extrait de code XML avec un schéma destiné à stocker certains types d'informations.

Les paramètres peuvent être configurés à l'aide des sections de configuration intégrées telles que connectionStringsou appSettings. Vous pouvez ajouter vos propres sections de configuration personnalisées; c'est un sujet avancé, mais très puissant pour créer des fichiers de configuration fortement typés.

Les applications Web ont généralement un fichier web.config, tandis que les applications GUI / service Windows ont un fichier app.config.

Les fichiers de configuration au niveau de l'application héritent des paramètres des fichiers de configuration globale, par exemple le fichier machine.config.

Lecture depuis l'App.Config

Les chaînes de connexion ont un schéma prédéfini que vous pouvez utiliser. Notez que ce petit extrait de code est en fait un fichier app.config (ou web.config) valide:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

Une fois que vous avez défini votre app.config, vous pouvez le lire dans le code à l'aide de la classe ConfigurationManager . Ne soyez pas intimidé par les exemples détaillés de MSDN; c'est en fait assez simple.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

Ecrire dans l'App.Config

Changer fréquemment les fichiers * .config n'est généralement pas une bonne idée, mais il semble que vous ne souhaitiez effectuer qu'une seule configuration.

Voir: Modifier la chaîne de connexion et recharger app.config au moment de l'exécution qui décrit comment mettre à jour la connectionStringssection du fichier * .config au moment de l'exécution.

Notez que, idéalement, vous effectueriez de telles modifications de configuration à partir d'un simple programme d'installation.

Emplacement de l'App.Config au Runtime

Q : Supposons que j'en change manuellement certains <value>dans app.config, que je l'enregistre puis que je le ferme. Maintenant, lorsque je vais dans mon dossier bin et lance le fichier .exe à partir d'ici, pourquoi ne reflète-t-il pas les modifications appliquées?

R : Lorsque vous compilez une application, son app.config est copié dans le répertoire bin 1 avec un nom qui correspond à votre exe. Par exemple, si votre exe s'appelait "test.exe", il devrait y avoir un "text.exe.config" dans votre répertoire bin. Vous pouvez modifier la configuration sans recompiler, mais vous devrez modifier le fichier de configuration qui a été créé au moment de la compilation, pas le fichier app.config d'origine.

1: Notez que les fichiers web.config ne sont pas déplacés, mais restent au même emplacement au moment de la compilation et du déploiement. Une exception à cela est lorsqu'un web.config est transformé .

.NET Core

De nouvelles options de configuration ont été introduites avec .NET Core. Le fonctionnement des fichiers * .config ne semble pas avoir changé, mais les développeurs sont libres de choisir de nouveaux paradigmes de configuration plus flexibles.

Tim Medora
la source
Voir aussi: codeproject.com/Articles/16466/… pour un bon aperçu du fonctionnement des fichiers de configuration
BKSpurgeon
56

Simplement, App.config est un XMLformat de fichier basé sur les configurations au niveau de l' application .

Exemple:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

Vous pouvez accéder aux configurations en utilisant ConfigurationManagercomme indiqué dans l'extrait de code ci-dessous:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

Remarque: ConfigurationSettings est une méthode obsolète pour récupérer les informations de configuration.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];
Furqan Safdar
la source
21
Vous devez faire référence System.Configuration.dllpour utiliser les API mentionnées ci-dessus.
KFL
2
D'une part, vous ne devriez pas stocker les chaînes de connexion dans la section AppSettings, elles vont dans la section ConnectionStrings. Pour deux, Visual Studio générera des propriétés typées fortes pour vos paramètres si vous les créez correctement via le concepteur, vous ne devriez jamais avoir besoin de taper un nom de clé manuellement (comme vous l'êtes dans le code ci-dessus).
BrainSlugs83
1
Nous ne parlons pas ici des meilleures pratiques mais plutôt de la solution au problème des OP.
Furqan Safdar
2
System.Configuration.ConfigurationManager.AppSettings["Key"]est déjà une chaîne, l'appel ToString()est redondant.
Bogdan Stăncescu
4

Juste pour ajouter quelque chose qui me manquait dans toutes les réponses - même si cela semble ridicule et évident dès que vous le savez:

Le fichier doit être nommé "App.config" ou "app.config" et peut être situé dans votre projet au même niveau que par exemple Program.cs.

Je ne sais pas si d'autres emplacements sont possibles, d'autres noms (comme application.conf, comme suggéré dans la documentation ODP.net) ne fonctionnaient pas pour moi.

PS. J'ai commencé avec Visual Studio Code et créé un nouveau projet avec "dotnet new". Aucun fichier de configuration n'est créé dans ce cas, je suis sûr qu'il y a d'autres cas. PPS. Vous devrez peut-être ajouter un package nuget pour pouvoir lire le fichier de configuration, dans le cas de .NET CORE, ce serait "dotnet add package System.Configuration.ConfigurationManager --version 4.5.0"

Dantel35
la source
C'est ce que je cherchais. Besoin de savoir à quel niveau l'inclure. Certains programmes / frameworks regardent dans des dossiers comme/resources
alex
4

App.Config est un fichier XML utilisé comme fichier de configuration pour votre application. En d'autres termes, vous stockez à l'intérieur tout paramètre que vous souhaitez modifier sans avoir à modifier le code (et recompiler). Il est souvent utilisé pour stocker des chaînes de connexion.

Consultez cet article MSDN pour savoir comment procéder.

Système en panne
la source
2

Vous pouvez accéder aux clés dans App.Config en utilisant:

ConfigurationSettings.AppSettings["KeyName"]

Prenez connaissance de ce fil

NuageuxMarbre
la source
16
il est considéré comme obsolète maintenant
mikus
0

Juste ajouter un point de plus

En utilisant app.config pour savoir comment contrôler l'accès aux applications, vous souhaitez appliquer des modifications particulières à l'ensemble du fichier de configuration de l'application, utilisez l'application et vous pouvez accéder aux paramètres comme ci-dessous ConfigurationSettings.AppSettings ["Key"]

Gummadidala Shiva
la source