web-dev-qa-db-fra.com

AppSettings obtient la valeur du fichier .config

Je ne suis pas en mesure d'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 une suggestion que dois-je faire?

157
Matt

Cela fonctionne pour moi:

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

La réponse que Dtsg a donnée fonctionne:

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

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

Configuration du système

Allez à votre explorateur de solution et cliquez avec le bouton droit de la souris sur sur Références et sélectionnez Ajouter une référence . Sélectionnez l'onglet Assemblys et recherchez Configuration .

Reference manager

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

Essayez ceci:

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

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. Obtenir une 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();
17
Masoud Siahkali

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

6
Kkloe

Dans le fichier app/web.config, 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 dans cette ligne:

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

* Notez que cela fonctionne bien pour .net4.5.x et .net4.6.x; mais ne travaille pas pour .net core. Cordialement: Rafael

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

Compte tenu de la disparition de ConfigurationManager, pour ceux qui cherchent encore une réponse à cette tentative (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.

(Edité le code pour quelque chose qui fonctionne réellement et est plus simple à lire)

3
Mike Dean

Pour une application Web, je vais normalement écrire cette méthode et l'appeler simplement avec la clé.

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

Certaines réponses semblent un peu en retrait IMO Voici ce que je pense vers 2016

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

Assurez-vous que System.Configuration est référencé.

La question demande valeur d'un appsettings clé

Ce qui devrait certainement être

  string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"]

  //yourKeyValue should hold on the HEAP  "filepath"

Voici une variante 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 :   [email protected];[email protected];
2
Tom Stickel

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

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

Bien que compile, il retourne toujours null.

Cela fonctionne cependant (d'en haut):

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

Vous pouvez simplement taper:

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

parce que key est un objet et AppSettings prend une chaîne

1
Soprano
ConfigurationManager.RefreshSection("appSettings")
string value = System.Configuration.ConfigurationManager.AppSettings[key];
1
musicinmusic
  1. Ouvrez "Propriétés" sur votre projet
  2. Allez dans l'onglet "Paramètres"
  3. Ajouter "Nom" et "Valeur"

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

Properties.Settings.Default.Name

OR

Properties.Settings.Default ["name"]

0
Hakan

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 porte le nom "App1.config". Je l'ai renommé "App.config" et tout a immédiatement fonctionné comme il se doit.

0
BCA