AppSettings obtient la valeur du fichier .config


172

Je ne parviens pas à accéder aux valeurs du fichier de configuration.

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var clientsFilePath = config.AppSettings.Settings["ClientsFilePath"].Value; 
// the second line gets a NullReferenceException

Fichier .config :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <!-- ... -->
    <add key="ClientsFilePath" value="filepath"/>
    <!-- ... -->
  </appSettings>
</configuration>

Avez-vous des suggestions que dois-je faire?

Réponses:


345

Cela fonctionne pour moi:

string value = System.Configuration.ConfigurationManager.AppSettings[key];

6
Le code que j'ai fourni nécessite que le fichier YourProgram.exe.config existe dans le même dossier que YourProgram.exe. Assurez-vous simplement que c'est là. Une erreur courante consiste à copier le fichier app.config dans le répertoire de destination, ce qui ne fonctionnera pas.
Adam

40
Nécessite une référence supplémentaire System.Configuration.
somme de contrôle du

13
Mon .NET 4.5 System.Configuration n'a pasConfigurationManager
qwert_ukg

3
J'obtiens également un null dans un projet 4.5 - j'ai passé deux heures là-dessus .. Doit être un bogue.
IrishChieftain

1
Je vois aussi cela dans une application multi-cible, ma configuration de base .net fonctionne mais la configuration du framework .net ne le fait pas (en utilisant ConfigurationManager)
Michael Brown

61

La réponse que dtsg a donné fonctionne:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

MAIS, vous devez ajouter une référence d'assemblage à

Configuration du système

Accédez à votre Explorateur de solutions et cliquez avec le bouton droit sur Références et sélectionnez Ajouter une référence . Sélectionnez l' onglet Assemblies et recherchez Configuration .

Gestionnaire de références

Voici un exemple de mon App.config :

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <appSettings>
    <add key="AdminName" value="My Name"/>
    <add key="AdminEMail" value="MyEMailAddress"/>
  </appSettings>
</configuration>

Ce que vous pouvez obtenir de la manière suivante:

string adminName = ConfigurationManager.AppSettings["AdminName"];

2
Je semble avoir le même problème que OP. Utilisation de VS2015. Je ne sais pas comment ni pourquoi, mais ma référence à System.Configuration dit System.configuration (en minuscules).
Tim

Cela pourrait faire avec une explication pour couvrir les endroits où il n'y a pas d'onglet «assemblages» (au moins VS2019)
SomeoneElse

21

Essayez ceci:

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

4
Votre implémentation doit être incorrecte. Cela fonctionne certainement pour récupérer les valeurs de clé d'un fichier de configuration.
dtsg

Assurez-vous d'ajouter une référence à System.Configuration dans les références de votre projet!
GrahamJ

19

Lire à partir de la configuration:

Vous devrez ajouter une référence à Config

  1. Ouvrez "Propriétés" sur votre projet
  2. Allez dans l'onglet "Paramètres"
  3. Ajouter "Nom" et "Valeur"
  4. Obtenez de la valeur en utilisant le code suivant:
string value = Properties.Settings.Default.keyname;

Enregistrer dans la configuration:

Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();

4
Vraiment utile car toutes les autres réponses utilisant ConfigurationManager ne fonctionnent pas si vous ajoutez vos valeurs dans les onglets Paramètres des propriétés du projet comme vous l'avez décrit. Merci.
The Dumb Radish

2
Cela a fonctionné pour moi aussi. J'obtenais une nullchaîne avec les recommandations ci-dessus, mais j'ai Properties.Settings.Default.<keyName>travaillé comme un charme!
dub stylee

1
Parfait! Je cherchais ceci :) Merci!
HSQL

@Masoud Siahkali, La semaine dernière, j'ai essayé à peu près ce que vous avez ici dans mon propre projet, mais les valeurs, lorsqu'elles sont modifiées par l'utilisateur au moment de l'exécution (il suffit de l'exécuter à partir de l'interface graphique VS pour le moment) ne persistent pas entre les instances. Ma question: stackoverflow.com/questions/61018443/… . Je n'ai toujours pas compris pourquoi les paramètres modifiés par l'utilisateur de ces valeurs ne persistent pas ...
Marky

8

J'utilise:

    ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
    //configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
    configMap.ExeConfigFilename = AppDomain.CurrentDomain.BaseDirectory + ServiceConstants.FILE_SETTING;
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
    value1 = System.Configuration.ConfigurationManager.AppSettings["NewKey0"];
    value2 = config.AppSettings.Settings["NewKey0"].Value;
    value3 = ConfigurationManager.AppSettings["NewKey0"];

valeur1 = ... et valeur3 = ... donne null et valeur2 = ... fonctionne

Ensuite, j'ai décidé de remplacer l'app.config interne par:

// Note works in service but not in wpf
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"d:\test\justAConfigFile.config.whateverYouLikeExtension");
ConfigurationManager.RefreshSection("appSettings");

string value = ConfigurationManager.AppSettings["NewKey0"];

Utilisation de VS2012 .net 4


C'est exactement ce dont j'avais besoin. Vraiment utile, merci.
Umut OVECOGLU

5

Dans le app/web.configfichier, définissez la configuration suivante:

<configuration>
  <appSettings>
    <add key="NameForTheKey" value="ValueForThisKey" />
    ... 
    ...    
  </appSettings>
...
...
</configuration>

alors vous pouvez y accéder dans votre code en mettant cette ligne:

string myVar = System.Configuration.ConfigurationManager.AppSettings["NameForTheKey"];

* Notez que cela fonctionne bien pour .net4.5.xet .net4.6.x; mais ne travaillez pas pour .net core. Meilleures salutations: Rafael


3

Revenons à celui-ci après un long moment ...

Compte tenu de la disparition de ConfigurationManager, pour quiconque cherche toujours une réponse à cet essai (par exemple):

AppSettingsReader appsettingsreader = new AppSettingsReader();
string timeAsString = (string)(new AppSettingsReader().GetValue("Service.Instance.Trigger.Time", typeof(string)));

Nécessite bien sûr System.Configuration.

(Modification du code en quelque chose qui fonctionne réellement et qui est plus simple à lire)


Bonne réponse, mais s'il vous plaît nettoyer, pourquoi créer une nouvelle instance d'AppSettingsReader lorsque vous recréez AppSettingsReader à nouveau, et vous n'avez pas besoin de lancer une chaîne, vous pouvez simplement la terminer par un remplacement .ToString ().
maytham-ɯɐɥʇʎɐɯ

2

Voyez, j'ai fait ce que je pensais être la chose évidente était:

string filePath = ConfigurationManager.AppSettings.GetValues("ClientsFilePath").ToString();

Pendant que cela compile, il renvoie toujours null.

Cela fonctionne cependant (d'en haut):

string filePath = ConfigurationManager.AppSettings["ClientsFilePath"];

2

Certaines des réponses semblent un peu hors de l' OMI Voici ma prise vers 2016

<add key="ClientsFilePath" value="filepath"/>

Assurez-vous qu'il System.Configurationest référencé.

La question demande la valeur d'une clé appsettings

Ce qui devrait certainement être

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

Voici une torsion dans laquelle vous pouvez regrouper des valeurs (pas pour cette question)

var emails = ConfigurationManager.AppSettings[ConfigurationManager.AppSettings["Environment"] + "_Emails"];

emails sera la valeur de la clé d'environnement + "_Emails"

example :   jack@google.com;thad@google.com;

2

Pour les applications Web, j'écrirai normalement cette méthode et je l'appellerai simplement avec la clé.

private String GetConfigValue(String key)
    {
       return System.Web.Configuration.WebConfigurationManager.AppSettings[key].ToString();
    }

1

Vous pouvez simplement taper:

string filePath = Sysem.Configuration.ConfigurationManager.AppSettings[key.ToString()];

car keyest un objet et AppSettingsprend une chaîne


1
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];

1

Ou vous pouvez utiliser

string value = system.configuration.ConfigurationManager.AppSettings.Get("ClientsFilePath");

//Gets the values associated with the specified key from the System.Collections.Specialized.NameValueCollection

0

Mon test simple a également échoué, en suivant les conseils des autres réponses ici - jusqu'à ce que je réalise que le fichier de configuration que j'ai ajouté à mon application de bureau portait le nom "App1.config". Je l'ai renommé "App.config" et tout a immédiatement fonctionné comme il se doit.


0
  1. Ouvrez "Propriétés" sur votre projet
  2. Allez dans l'onglet "Paramètres"
  3. Ajouter "Nom" et "Valeur"

LE CODE SERA GÉNÉRÉ AUTOMATIQUEMENT

    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup ..." ... >
          <section name="XX....Properties.Settings" type="System.Configuration.ClientSettingsSection ..." ... />
        </sectionGroup>
      </configSections>
      <applicationSettings>
        <XX....Properties.Settings>
          <setting name="name" serializeAs="String">
            <value>value</value>
          </setting>
          <setting name="name2" serializeAs="String">
            <value>value2</value>
          </setting>
       </XX....Properties.Settings>
      </applicationSettings>
    </configuration>

Pour obtenir une valeur

Propriétés.Settings.Default.Name

OU

Properties.Settings.Default ["nom"]

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.