2010-03-08 27 views
114

Estoy tratando de leer StartingMonthColumn y CategoryHeadingColumn desde el archivo app.config a continuación utilizando el códigoal leer el archivo app.config

ConfigurationSettings.AppSettings["StartingMonthColumn"] 

pero vuelve nula, 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> 
+0

¿Estás tratando de ejecutar la aplicación desde la carpeta \ debug \ bin mientras se cambia el archivo de configuración en el 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? Seguramente se llama así en su proyecto, pero en el directorio de salida de la aplicación, debe llamarse lo mismo que su binario de salida + ".config" (así como "MyLibrary.dll.config", o "MyProgram.exe.config" ", etc ...) – BrainSlugs83

+0

@ BrianSlugs83 gracias amigo, me preguntaba por qué se bloquea mi aplicación. 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". –

Respuesta

146

ConfigurationSettings.AppSettings es obsoleta, se debe utilizar en lugar ConfigurationManager.AppSettings (que tendrá que añadir una referencia a System.Configuration)

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

Si todavía tiene problemas de lectura en la configuración de la aplicación a continuación, comprobar que el archivo de app.config tiene el nombre correcto. Específicamente, debe nombrarse de acuerdo con el ensamblaje de 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 lanzará una excepción al intentar analizar esos valores. – Bittercoder

+0

@ bittercoder, sí, sin embargo, su archivo app.config debería ** siempre ** tener la configuración correcta de todos modos. Si el OP quiere agregar algún tipo de manejo allí, es decir, * TryParse * entonces, por supuesto, pueden hacerlo. Sin embargo, esta no era la pregunta. – James

+2

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

6

Este:

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

funciona bien para mí.

Tenga en cuenta que es ConfigurationManager en el System.Configuration espacio de nombres (por lo que es probable que desee una declaración using System.Configuration;), y que, dado que lo que se lee en cuenta un tipo de cadena que necesita para analizar lo que se lee en lo utilice como número.

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

+0

cuál es la referencia que debe agregarse para obtener ConfigurationManager.Appsettings uso .Net 2.0 Framework – Sathish

+1

Necesita una referencia a 'System. Configuration.dll'. La clase 'ConfigurationManager' se agregó en .NET 2.0, por lo que debería estar bien. –

16

ConfigurationSettings.AppSettings se desuso, ver aquí:

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

Dicho esto, es preciso seguir trabajando.

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

Intente conectar un depurador y comprobando el valor siguiente:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

Y luego abrir el archivo de configuración y verificación de la sección está allí como se esperaba.

+0

Hola Bittercoder cuando trato de obtener el valor de AppDomain.CurrentDomain.SetupInformation.ConfigurationFile obtengo C: \\ Archivos de programa \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config que no es mi archivo de configuración. ¿Qué debo hacer? – Sathish

+0

Ese es el archivo de configuración correcto ... puede ser que no lo esperaba. 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 similarmente llamado en el mismo directorio que su ensamblado, esto es desde donde se leerán las configuraciones de tu aplicación. Vea estos enlaces para más detalles: http://www.dotnet247.com/247reference/msgs/56/281797.aspx http://stackoverflow.com/questions/2288575/can-i-use-access-the- app-config-from-net-code-when-called-via-com – Bittercoder

6

La razón es simple, su llamada a ConfigurationSettings.AppSettings no devuelve el archivo de configuración requerida. Pruebe 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 adjunta, por ejemplo, MyApp.exe.config
  • o puede utilizar ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Esperanza esto ayuda

2

tratar de reconstruir su proyecto - Se copia el contenido de App.config a "<YourProjectName.exe> .config" en la biblioteca de construcción.

0

También agregue la clave "StartingMonthColumn" en App.config desde donde ejecuta la aplicación, por ejemplo, en el App.config del proyecto de prueba.

10

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

enter image description here

+1

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

Cuestiones relacionadas