2012-05-18 13 views
13

Ho un file app.config che assomiglia a questo:Cosa c'è di sbagliato nel mio file app.config?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="TestKey" value="TestValue" /> 
    </appSettings> 
    <newSection> 
    </newSection> 
</configuration> 

E sto cercando di usarla in questo modo:

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(@"C:\app.config"); 
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap); 

Tuttavia, non sembra funzionare . Quando interrompo e eseguo il debug dopo che il file è stato letto, e provo a guardare configuration.AppSettings ottengo uno 'configuration.AppSettings' threw an exception of type 'System.InvalidCastException'.

Sono sicuro che sto leggendo il file, perché quando guardo configuration.Sections ["newSection"] mi viene restituito un vuoto {System.Configuration.DefaultSection} (anziché null).

Immagino di avere qualcosa di veramente sbagliato ... cosa succede con AppSettings?

risposta

12

Si sta utilizzando una funzione errata per leggere l'app.config. OpenMappedMachineConfiguration ha lo scopo di aprire il file machine.config, ma si sta aprendo un tipico file application.exe.config. Il codice seguente leggerà app.config e restituirà ciò che ti aspetteresti.

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
    fileMap.ExeConfigFilename = @"C:\app.config"; 
    System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
    MessageBox.Show(configuration.AppSettings.Settings["TestKey"].Value); 
3

Penso che l'elemento 'newSection' stia causando il problema. A meno che non si aggiunga anche un elemento 'configSections', per dichiarare cos'è 'newSection', .NET non sarà in grado di lanciarlo.

avete bisogno di qualcosa di simile:

<configSections> 
    <section name="newSection" type="Fully.Qualified.TypeName.NewSection, 
    AssemblyName" /> 
</configSections> 

In primo luogo, mi piacerebbe provare a rimuovere l'elemento 'newSection' per vedere se questo migliora la situazione.

This link spiega le sezioni di configurazione personalizzate.

+0

Unforunately, non è quello. Ho inserito la nuova sezione solo per essere sicuro che stavo davvero caricando il file. Rimozione non fa differenza. – Beska

3

Se leggete la documentazione su MSDN sulla funzione si tenta di utilizzare:

OpenExeConfiguration MSDN

Nel modo in cui lo si utilizza cercherà di trovare la configurazione di app.config.exe. Se si vuole fare uso di appSettings, aggiungerli alla configurazione del file di configurazione dalla vostra applicazione e quindi accedervi utilizzando Configuration Manager:

Using appsetting .net MSDN

+0

Questo non è troppo sorprendente ... Non pensavo che OpenExeConfiguration fosse giusto, ma dal momento che non avevo fortuna con l'altra opzione ho pensato di esplorarlo. Ho eliminato la modifica alla mia domanda che, probabilmente, ha causato solo più confusione. – Beska

2

Ogni volta che ho usato una chiave in il mio WebConfig L'ho fatto in questo modo

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <SectionGroup> 
     Section Stuff 
    </SectionGroup> 
    </configSections> 
<appsettings> 
    <add key="TestKey" value="TestValue" /> 
</appSettings> 
</configuration> 

non capisco pienamente perché ma sarebbe sempre buttare errori a me avere impostazioni di app all'interno di configsettings.

Problemi correlati