lectura del archivo app.config


131

Estoy tratando de leer StartingMonthColumn y CategoryHeadingColumn del siguiente archivo app.config usando el código

ConfigurationSettings.AppSettings["StartingMonthColumn"]

pero devuelve nulo, también ConfigurationSettings.AppSettings.Count devuelve cero

Por favor, ayúdame a leer esto en mi aplicación de Windows

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

¿Está intentando ejecutar la aplicación desde la carpeta \ bin \ debug mientras cambia el archivo de configuración en la raíz del proyecto? De lo contrario, cambie la configuración y reconstruya el código después de ejecutar una limpieza.
Kangkan

1
El archivo no se llama "app.config" ¿verdad? Es seguro que se llama así en su proyecto, pero en el directorio de salida de la aplicación, debe llamarse igual que su binario de salida + ".config" (como "MyLibrary.dll.config" o "MyProgram.exe.config ", etc ...)
BrainSlugs83

@ BrianSlugs83 gracias amigo, me preguntaba por qué mi aplicación falla. Ahora, después de dos días de buscar en todas partes, la respuesta está aquí en el comentario. Acabo de tener "app.config" y no "MyProgram.exe.config".
śmiglidigli

Consulte stackoverflow.com/questions/1189364/… para encontrar una solución. Gracias
Ariful Islam

Respuestas:


171

Ajustes de configuración .AppSettings está obsoleto , en su lugar, debe usar Configuration Manager .AppSettings (deberá agregar una referencia a System.Configuration )

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

Si aún tiene problemas para leer en la configuración de su aplicación, compruebe que su app.configarchivo tenga el nombre correcto. Específicamente, debe nombrarse de acuerdo con el ensamblaje en ejecución, es decir MyApp.exe.config, y debe residir en el mismo directorio que MyApp.exe.


2
Si ConfigurationSettings.AppSettings ["StartingMonthColumn"] devuelve nulo o una cadena vacía, sospecho que Int32.Parse arrojará una excepción al intentar analizar esos valores.
Bittercoder

@bittercoder, sí, sin embargo, su archivo app.config siempre debe tener la configuración correcta de todos modos. Si el OP desea agregar alguna forma de manejo, es decir, TryParse, entonces, por todos los medios que puedan. Sin embargo, esta no era la pregunta.
James

2
Tenga en cuenta que también puede obtener acceso a las versiones de tipo seguro de los valores, a través de Settings.Default. * (Es decir, en este caso sería Settings.Default.StartingMonthColumn).
BrainSlugs83

@ BrainSlugs83 Tenga en cuenta que su configuración de usuario se confunde con la configuración de la aplicación. Si desea un acceso fuertemente tipado a la configuración de la aplicación, deberá implementar una Sección de configuración
James

Eso no es correcto, extraerá valores de app.config independientemente de si los valores tienen un alcance de "Usuario" o "Aplicación" (desde el diseñador de GUI, puede elegir el alcance para cada configuración).
BrainSlugs83

20

Solo para la referencia futura, solo necesita agregar System.Configurationa su biblioteca de referencias:

ingrese la descripción de la imagen aquí


2
su respuesta es mejor que la primera respuesta aquí, todo el mundo se olvidó de decir que tiene que agregar una referencia
ensayo

19

ConfigurationSettings.AppSettings está en desuso , consulte aquí:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

Dicho esto, aún debería funcionar.

Solo una sugerencia, pero ¿ha confirmado que la configuración de su aplicación es la que está utilizando su ejecutable?

Intente adjuntar un depurador y verifique el siguiente valor:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Y luego abriendo el archivo de configuración y verificando que la sección está allí como esperaba.


Hola Bittercoder cuando intento obtener el valor de AppDomain.CurrentDomain.SetupInformation.ConfigurationFile obtengo C: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config, que no es mi archivo de configuración ... ¿cuál debería ser? lo hago
Sathish

Ese es el archivo de configuración correcto ... puede ser que no lo estabas esperando. De hecho, en este caso, creo que C: \ Archivos de programa \ Microsoft Office \ OFFICE11 \ Excel.EXE.config es la configuración global, y si coloca un Excel.EXE.config de forma similar en el mismo directorio que su ensamblado, este es de donde se leerá la configuración de su aplicación. Vea estos enlaces para más detalles: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
Bittercoder


7

Esta:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

funciona bien para mi

Tenga ConfigurationManageren cuenta que está en el System.Configurationespacio de nombres (por lo que es probable que desee unusing System.Configuration; declaración), y que, dado que lo que se lee en cuenta un tipo de cadena que tendrá que analizar lo que se lee en utilizarlo como un número.

Además, asegúrese de establecerlo system.configuration.dllcomo referencia en su proyecto o script de compilación.


¿Cuál es la referencia que se debe agregar para obtener ConfigurationManager.Appsettings que uso .Net 2.0 Framework
Sathish

1
Necesitas una referencia a System.Configuration.dll. La ConfigurationManagerclase se agregó en .NET 2.0, por lo que debería estar bien.
Michael Burr

7

La razón es simple, su llamada a ConfigurationSettings.AppSettingsno devuelve el archivo de configuración requerido. Intente cualquiera de las siguientes formas:

  • Asegúrese de que la configuración de su aplicación tenga el mismo nombre que el archivo exe de su aplicación, con la extensión .config adjuntada, por ejemplo, MyApp.exe.config
  • O puedes usar ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Espero que esto ayude


3

Intente reconstruir su proyecto: copia el contenido de App.config"<YourProjectName.exe> ​​.config" en la biblioteca de compilación.


2

Agregue también la clave "StartingMonthColumn" en App.config desde el que ejecuta la aplicación, por ejemplo, en App.config del proyecto de prueba.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.