2012-05-18 19 views
13

Tengo un archivo app.config que tiene este aspecto:¿Qué pasa con mi archivo app.config?

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

Y yo estoy tratando de usarlo de esta manera:

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

Sin embargo, no parece estar funcionando . Cuando rompo y depuro justo después de leer el archivo, y trato de mirar configuration.AppSettings obtengo un 'configuration.AppSettings' threw an exception of type 'System.InvalidCastException'.

Estoy seguro de que estoy leyendo el archivo, porque cuando miro la configuración. Secciones ["newSection"] Me devuelve un {System.Configuration.DefaultSection} vacío (en lugar de nulo).

supongo que tengo algo muy malo básica ... lo que está pasando con AppSettings?

Respuesta

12

Está utilizando una función incorrecta de leer el app.config. OpenMappedMachineConfiguration está destinado a abrir su archivo machine.config, pero está abriendo un archivo típico application.exe.config. El siguiente código leerá su app.config y devolverá lo que espera.

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

creo que el elemento 'newSection' está causando el problema. A menos que agregue un elemento 'configSections' también, para declarar qué es 'newSection', .NET no podrá lanzarlo.

Usted necesita algo así como:

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

En primer lugar, me gustaría probar quitando el elemento 'newSection' para ver si esto mejora la situación.

This link explica sobre las secciones de configuración personalizada.

+0

Desafortunadamente, eso no es todo. Puse el newSection solo para asegurarme de que realmente estaba cargando el archivo. Eliminarlo no hace ninguna diferencia. – Beska

3

Si usted lee la documentación de MSDN en la función que intenta utilizar:

OpenExeConfiguration MSDN

En la forma en que lo está utilizando va a tratar de encontrar la configuración de app.config.exe. Si desea hacer uso de appsettings, añadirlos a la configuración del archivo de configuración de la aplicación y luego acceder a ellos mediante el gestor de configuración:

Using appsetting .net MSDN

+0

Eso no es demasiado sorprendente ... No pensé que OpenExeConfiguration tuviera razón, pero como no estaba teniendo suerte con la otra opción pensé que la exploraría. He borrado la edición de mi pregunta y creo que probablemente haya causado más confusión. – Beska

2

Cada vez que he usado una llave en mi webconfig lo he hecho como tal

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

no entiendo del todo por qué pero siempre tiraba errores en que yo tenga configuración de la aplicación en el interior de configsettings.