2012-05-26 16 views
110

Non riesco ad accedere ai valori nel file di configurazione.AppSettings ottiene valore dal file .config

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

file .config:

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

Avete qualche suggerimento che cosa devo fare?

risposta

230

questo funziona per me:

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

Ho provato questo metodo, ma ho ottenuto una stringa nulla. – Matt

+1

Vedi questo: http://stackoverflow.com/a/10718733/730701 – Adam

+0

Non capisco. Pensi che non abbia accesso al file di configurazione? – Matt

18

Dare a questo un andare:

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

ho provato questo metodo, ma mi sono stringa nulla. – Matt

+4

La sua implementazione deve essere errata. Questo sicuramente funziona per recuperare i valori chiave da un file di configurazione. – dtsg

3

sto usando:

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

Dove valore1 = ... e value3 = ... dà null e valore2 = ... funziona

Poi ho deciso di sostituire l'app.config interna con:

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

Utilizzando VS2012 .net 4

0

mia semplice test non è riuscito, seguendo il consiglio di le altre risposte qui - fino a quando mi sono reso conto che il file di configurazione che ho aggiunto alla mia applicazione desktop è stato dato il nome "App1.config". L'ho rinominato in "App.config" e tutto ha funzionato immediatamente come dovrebbe.

33

La risposta che ha dato dtsg opere:

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

MA, è necessario aggiungere un riferimento assemblaggio a

System.Configuration

Vai al tuo Solution Explorer e tasto destro su Riferimenti e selezionare Aggiungere riferimento. Selezionare la scheda Assemblaggi e cercare la Configurazione.

Reference manager

Ecco un esempio della mia 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> 

che si può ottenere nel modo seguente:

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

Mi sembra di avere lo stesso problema di OP. Utilizzando VS2015. Non so come o perché, ma il mio riferimento a System.Configuration dice 'System.configuration' (minuscolo). – Tim

1

Vedi ho fatto quello che pensavo fosse la cosa più ovvia era:

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

Mentre che compila sempre restituisce null.

Questo però (dall'alto) funziona:

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

alcune delle risposte sembra un po 'fuori IMO Qui è il mio introito circa 2016

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

Assicurarsi System.Configuration è riferimento.

domanda sta chiedendo valore di un appsettings chiave

Che la maggior parte certamente dovrebbe essere

string yourKeyValue = ConfigurationManager.AppSettings["ClientsFilePath"] 

    //yourKeyValue should hold on the HEAP "filepath" 

Ecco una torsione in cui è possibile raggruppare i valori (non per questa domanda)

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

emails sarà il valore di Env ironment chiave + "_Emails"

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

Leggi da Config:

Avrai bisogno di aggiungere un riferimento a Config

  1. Aperte "Proprietà" sul progetto
  2. Vai alla " Impostazioni "Scheda
  3. Aggiungi" Nome "e" Valore "
  4. Ottieni il valore con il seguente codice:

    string value = Properties.Settings.Default.keyname;

Salva Config:

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

Davvero utile poiché tutte le altre risposte che utilizzano ConfigurationManager non funzionano se si aggiungono i valori nelle schede Impostazioni delle proprietà del progetto come descritto. Grazie. –

+0

Questo ha funzionato anche per me. Stavo ottenendo una stringa 'null' con i consigli sopra, ma' Properties.Settings.Default. 'ha funzionato come un fascino! –

2

nel file app/config web impostare la seguente configurazione:

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

poi si può accedere a questo nel codice, mettendo in questo riga:

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

* Nota t questo lavoro va bene per .net4.5.x e .net4.6.x; ma non funziona per .net core. Cordiali saluti: Rafael

2

Per l'applicazione Web, normalmente scriverò questo metodo e lo chiamerò semplicemente con la chiave.

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

È possibile digitare semplicemente:

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

perché key è un oggetto e AppSettings prende una stringa

Problemi correlati