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"];

Où 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.