la lectura de la app.archivo de configuración

Estoy tratando de leer StartingMonthColumn y CategoryHeadingColumn
en la siguiente aplicación.archivo de configuración utilizando el código

ConfigurationSettings.AppSettings["StartingMonthColumn"]

pero es devolver null, también ConfigurationSettings.AppSettings.Count devuelve cero

Por favor me ayuda 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ás tratando de ejecutar la aplicación desde la carpeta \bin\debug mientras se cambia el archivo de configuración en el directorio raíz del proyecto? De lo contrario, cambiar la configuración y volver a generar el código después de la ejecución de la limpieza.
  • El archivo no tiene nombre «de la aplicación.config» de la derecha? Es el nombre que en su proyecto de seguro, pero en la aplicación del directorio de salida, debe ser el nombre de la misma cosa que su salida binaria + «.config» (así como «MyLibrary.dll.config», o «Miprograma.exe.config», etc…)
  • gracias compañero, me preguntaba por qué mi aplicación se bloquea. Ahora, después de dos días de búsqueda en todas partes, aquí está la respuesta en el comentario. Yo sólo tenía «de la aplicación.config» y no «Miprograma.exe.config».
  • Por favor, busque en stackoverflow.com/questions/1189364/… para la solución. Gracias
InformationsquelleAutor Sathish | 2010-03-08

8 Kommentare

  1. 170

    Configuración deConfiguración.AppSettings es obsoletos, usted debe utilizar Configuración deManager.AppSettings en lugar de (usted tendrá que añadir una referencia a Sistema.Configuración)

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

    Si usted todavía tiene problemas de lectura en la configuración de tu aplicación, a continuación, compruebe que su app.config archivo es el nombre correcto. Específicamente, debe ser nombrado de acuerdo a la ejecución de la asamblea es decir,MyApp.exe.config, y debe residir en el mismo directorio que MyApp.exe.

    • Si ConfigurationSettings.AppSettings[«StartingMonthColumn»] devuelve el valor null o una cadena vacía sospecho que Int32.Analizar producirá una excepción en intentar analizar que los valores.
    • sí sería, sin embargo, su aplicación.archivo de configuración deben siempre tiene la correcta configuración de todos modos. Si el OP quiere agregar algún tipo de manipulación en no decir, TryParse, a continuación, por todos los medios que pueda. Sin embargo, esta no es la cuestión.
    • Tenga en cuenta que usted también puede obtener acceso a la fuerte escrito versiones de los valores, a través de la Configuración.Por defecto.* (es decir, en este caso sería la Configuración.Por defecto.StartingMonthColumn).
    • Tenga en cuenta que su confuso usuario configuración con la configuración de la aplicación. Si desea establecimiento inflexible de tipos de acceso a la configuración de la aplicación que usted necesita para implementar un custom ConfigurationSection
    • Eso no es correcto, que se tire de los valores de la aplicación.config independientemente de si los valores están asignados a «el Usuario» o «Aplicación» (desde la interfaz de usuario del diseñador, usted puede elegir el alcance de cada opción).
    • Eso no es lo que me estaba refiriendo – para decirlo simplemente, Properties.Settings.Default no corresponden a la <appSettings> bloque de configuración – vea esta respuesta para obtener una explicación de la diferencia.
    • Eso es cierto. Leerá los valores de la «applicationSettings» nodo, pero no el «appSettings» nodo. — Yo todavía sostienen que la escritura de su propia lógica de análisis para algo que se construye es una exageración.
    • Teniendo en cuenta que no cada valor tendrá analizado (sólo los no-valores de cadena) creo que no es mucho de un problema. Sin embargo, eso no quiere decir que no se debe usar el applicationSettings – consulte el Pros y contras de appSettings vs applicationSettings. El quid de la cuestión es appSettings es más fácil si usted está mirando para agregar algo de configuración rápida para su aplicación.
    • Yo diría que es más fácil para agregar rápidamente los parámetros de configuración utilizando applicationSettings porque no es la interfaz gráfica de usuario y que están fuertemente tipadas para escribir menos. Sin embargo, ellos no parecen funcionar en mono: stackoverflow.com/questions/23594269/…

  2. 20

    Sólo para referencia en el futuro, sólo tiene que añadir System.Configuration a sus referencias de la biblioteca:

    la lectura de la app.archivo de configuración

    • su respuesta es mejor que la primera respuesta aquí, todo el mundo se olvidó de decir que usted tiene que agregar una referencia
  3. 18

    ConfigurationSettings.AppSettings es obsoleto, ver aquí:

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

    Que dijo, todavía debe trabajar.

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

    Intentar adjuntar un depurador y verificar el siguiente valor:

    AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

    Y, a continuación, abrir el archivo de configuración y verificación de la sección está allí como usted espera.

    • Hola Bittercoder cuando intento obtener el valor para el dominio de aplicación.CurrentDomain.SetupInformation.ConfigurationFile puedo conseguir C:\\Program \Archivos de programa\Microsoft Office\\OFFICE11\\exCEL.EXE.config no se cual es mi archivo de configuración… ¿qué debo hacer
    • Ese es el correcto archivo de configuración… puede ser que usted no esperaba. De hecho, en este caso yo creo que C:\Program Files\Microsoft Office\OFFICE11\Excel.EXE.config es el global config, y si se coloca una similiarly nombre Excel.EXE.config en el mismo directorio que el de la asamblea, esto es, donde la configuración de tu aplicación será leído. Consulte los siguientes enlaces para obtener más información: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575/…
  4. 7

    Este:

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

    funciona muy bien para mí.

    Nota que ConfigurationManager es en el System.Configuration espacio de nombres (así que es probable que usted desee un using System.Configuration; declaración), y que desde lo que se lee en un tipo de cadena tendrás que analizar lo que se lee en el uso como un número.

    También, asegúrese de system.configuration.dll como una referencia en el proyecto o secuencia de comandos de compilación.

    • ¿cuál es la referencia que deben ser añadidos para obtener ConfigurationManager.Appsettings que yo uso .Net Framework 2.0
    • Se necesita una referencia a System.Configuration.dll. El ConfigurationManager clase fue añadido en .NET 2.0, por lo que se debe ACEPTAR.
  5. 7

    La razón es simple, su llamada a la ConfigurationSettings.AppSettings es no devolver la necesaria archivo de configuración. Por favor, pruebe cualquiera de las siguientes maneras:

    • Asegurarse de que su aplicación de configuración tiene el mismo nombre que la aplicación del exe de archivo con la extensión .config anexado por ejemplo MyApp.exe.config
    • O puede utilizar ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

    Espero que esto ayude

  6. 3

    Tratar de reconstruir su proyecto – copia el contenido de App.config a
    «<YourProjectName.exe>.config» en la construcción de la biblioteca.

  7. 1

    También agregar la clave «StartingMonthColumn» en la Aplicación.de configuración que se ejecuta la aplicación, por ejemplo en la Aplicación.config del proyecto de prueba.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea