2012-05-26 9 views
110

Ich kann nicht auf Werte in der Konfigurationsdatei zugreifen.AppSettings erhalten Wert von .config-Datei

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

CONFIG-Datei:

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

Haben Sie irgendeinen Vorschlag haben, was soll ich tun?

Antwort

230

Dies funktioniert für mich:

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

Ich habe diese Methode versucht, aber ich habe Null-String. – Matt

+1

Siehe dies: http://StackOverflow.com/a/10718733/730701 – Adam

+0

Ich verstehe nicht. Denkst du, ich habe keinen Zugriff auf die Konfigurationsdatei? – Matt

18

Geben dieses gehen:

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

ich diese Methode versucht, aber ich habe Null-String. – Matt

+4

Ihre Implementierung davon muss falsch sein. Dies funktioniert definitiv zum Abrufen von Schlüsselwerten aus einer Konfigurationsdatei. – dtsg

3

Ich verwende:

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

Wo value1 = ... und value3 = ... gibt null und Wert2 = ... arbeiten

Dann entschied ich mich mit dem internen app.config zu ersetzen:

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

Mit VS2012 .net 4

0

Mein einfachen Test nicht bestand auch nach der Beratung von der andere antwortet hier - bis ich feststellte, dass die Konfigurationsdatei, die ich meiner Desktop-Anwendung hinzugefügt hatte, den Namen "App1.config" erhielt. Ich habe es in "App.config" umbenannt und alles hat sofort funktioniert, wie es sollte.

33

Die Antwort, dass dtsg Arbeiten gab:

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

ABER, benötigen Sie eine Montagereferenz zu

System.Configuration

Gehen Sie zu Ihrem Lösung hinzufügen Explorer und Rechtsklick auf Referenzen und wählen Referenz hinzufügen. Wählen Sie die Assemblies Registerkarte und suchen Sie nach Konfiguration. Hier

Reference manager

ist ein Beispiel für meine 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> 

, die Sie in der folgenden Art und Weise erhalten können:

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

Ich habe das gleiche Problem wie OP. Verwenden von VS2015. Ich weiß nicht, wie oder warum, aber mein Verweis auf System.Configuration sagt 'System.configuration' (Kleinschreibung). – Tim

1

Siehe Ich tat, was ich dachte, die offensichtliche Sache war, war:

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

Während, dass es immer kompiliert gibt null zurück.

Dies ist jedoch (von oben) arbeitet:

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

Einige der Antworten ein wenig IMO Hier ist mein nehmen circa 2016

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

Stellen Sie sicher, System.Configuration off scheint, ist verwiesen.

Frage ist für Wert fragen eines appsettings Schlüssel

Welche sicherlich

string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"] 

    //yourKeyValue should hold on the HEAP "filepath" 

hier eine Wendung sein sollte, in dem Sie gruppieren können zusammen Werte (nicht für diese Frage)

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

emails wird Wert von Env sein ironment Key + "_Emails"

example : [email protected];[email protected]; 
10

lesen Von Config:

Sie werden einen Verweis auf Config

  1. Open "Eigenschaften" auf Ihrem Projekt
  2. Gehen Sie auf "hinzufügen müssen Einstellungen "Registerkarte
  3. Hinzufügen" Name "und" Wert "
  4. Wert mit folgendem Code abrufen:

    Zeichenfolge Wert = Properties.Settings.Default.keyname;

Speicher In der Config:

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

Wirklich hilfreich, da alle anderen Antworten, die den ConfigurationManager verwenden, nicht funktionieren, wenn Sie Ihre Werte auf den Registerkarten "Einstellungen" der Projekteigenschaften wie beschrieben hinzufügen. Vielen Dank. –

+0

Das hat auch für mich funktioniert. Ich erhielt eine 'Null'-Zeichenfolge mit den obigen Empfehlungen, aber 'Properties.Settings.Default. 'arbeitete wie ein Charme! –

2

in der App/Web-CONFIG-Datei legen Sie die folgende Konfiguration:

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

dann können Sie dies in Ihrem Code zugreifen, indem Sie in dem Putten Linie:

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

* Hinweis t Hat dies funktioniert für .net4.5.x und .net4.6.x; aber nicht für .net Kern arbeiten. Mit freundlichen Grüßen: Rafael

2

Für Web-Anwendung, werde ich normalerweise diese Methode schreiben und nur mit dem Schlüssel anrufen.

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

können Sie einfach eingeben:

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

weil key ein Objekt ist und AppSettings nimmt einen String