2008-09-22 14 views
78

Soy realmente nuevo en .NET y todavía no entendía cómo funcionan los archivos de configuración.Manera más simple de tener un archivo de configuración en una aplicación de Windows Forms C#

Cada vez que busco en Google al respecto obtengo resultados sobre web.config, pero estoy escribiendo una aplicación de formularios para Windows.

Descubrí que necesito usar el espacio de nombres System.Configuration pero la documentación no está ayudando.

¿Cómo puedo definir que mi archivo de configuración sea XYZ.xml? ¿O tiene un nombre "predeterminado" para el archivo de configuración? Todavía no entendí eso.

Además, ¿cómo defino una nueva sección, realmente necesito crear una clase que herede de ConfigurationSection?

me gustaría tener sólo un archivo de configuración con algunos valores como esta:

<MyCustomValue>1</MyCustomValue> 
<MyCustomPath>C:\Some\Path\Here</MyCustomPath> 

¿Hay una manera sencilla de hacerlo? ¿Puede explicar de manera sencilla cómo leer y escribir desde/a un archivo de configuración simple?

+1

¿Cuál es su versión de .NET? Para 2.0 y superior, hay una forma muy linda llamada Configuración. – Thomas

+2

Niza palabra "examplain" – Seven

+1

@Seven era un error tipográfico pero podría significar "Explicar con un ejemplo" :) –

Respuesta

110

Desea utilizar una App.Config.

Cuando agrega un nuevo elemento a un proyecto, hay algo llamado archivo de configuración de aplicaciones. Agrega eso.

a continuación, agregar teclas de la sección de configuración/appsettings

igual:

<configuration> 
<appSettings> 
    <add key="MyKey" value="false"/> 

acceso a los miembros haciendo

System.Configuration.ConfigurationSettings.AppSettings["MyKey"]; 

Esto funciona en .net 2 y superior.

+1

Actualmente funciona en todas las versiones de .NET, desde v1.0 en adelante. La nueva clase en .NET 2.0 es ConfigurationManager. –

+4

Personalmente, utilizo la pestaña "Configuración" en "Propiedades de la aplicación" (Framework 2.0 en adelante solamente) porque Visual Studio codificará genéticamente las propiedades para sus configuraciones. También pueden incluir configuraciones de "Usuario" que son de lectura/escritura en tiempo de ejecución. –

+0

@Mike Sí, tuve la sensación de que ese era el caso, pero no estaba muy seguro. No he trabajado mucho con 1. – qui

0

¿Qué versión de .Net y VS estás usando?

Cuando creó el nuevo proyecto, debe tener un archivo en su solución llamado app.config, que es el archivo de configuración predeterminado.

6

El mejor artículo (IMHO) sobre la configuración de la aplicación .NET está en CodeProject Unraveling the Mysteries of .NET 2.0 Configuration. Y mi próximo artículo favorito (más corto) sobre secciones en archivos de configuración .net es Understanding Section Handlers - App.config File.

+0

Realmente no es la forma más sencilla que el usuario pregunta , pero desentrañar los misterios de las configuraciones de .NET 2.0 es realmente una gran serie de artículos. –

3

En Windows formas, tiene un app.config, que es muy similar a web.config. Pero dado que lo que veo que necesita son valores personalizados, sugiero usar la Configuración. Para hacer eso, abra las propiedades de su proyecto, luego vaya a la configuración. Si un archivo de configuración no existe, tendrá un enlace para crear uno. Luego, puede agregar las configuraciones a la tabla que ve allí, lo que generaría tanto el XML apropiado, como una clase de Configuraciones que se puede usar para cargar y guardar las configuraciones. La clase de configuración se denominará algo así como DefaultNamespace.Properties.Settings. A continuación, puede utilizar un código similar a:

using DefaultNamespace.Properties; 

namespace DefaultNamespace { 
    class Class { 
     public int LoadMySettingValue() { 
      return Settings.Default.MySettingValue; 
     } 
     public void SaveMySettingValue(int value) { 
      Settings.Default.MySettingValue = value; 
     } 
    } 
} 
8

Debe crear un archivo app.config (muy similar a web.config)

Debe hacer clic derecho sobre su proyecto, en Agregar nuevo elemento, el nuevo " Archivo de configuración de la aplicación ".

Asegúrese de agregar usando System.Configuration a su proyecto.

A continuación, puede agregar valores a que

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="setting1" value="key"/> 
    </appSettings> 
    <connectionStrings> 
    <add name="prod" connectionString="YourConnectionString"/> 
    </connectionStrings> 
</configuration> 

private void Form1_Load(object sender, EventArgs e) 
    { 
     string setting = ConfigurationManager.AppSettings["setting1"]; 
     string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString; 
    } 

Sólo una nota, according to Microsoft, se debe utilizar en lugar de ConfigurationManager ConfigurationSettings. (Consulte la sección de comentarios) "La clase ConfigurationSettings solo proporciona compatibilidad con versiones anteriores. Para las aplicaciones nuevas, debe usar la clase ConfigurationManager o la clase WebConfigurationManager"

+0

Muy útil. Resuelto mi problema al T. –

+0

En Visual Studio 2015: Haga clic en Proyecto> Agregar referencia. Desplácese hacia abajo hasta la mitad para encontrar System.Configuration Haga clic en Aceptar, luego actualice la línea de código según el comentario de Nathan. – Robot70

7

El nombre predeterminado para un archivo de configuración es [yourexe] .exe.config . Entonces notepad.exe tendrá un archivo de configuración llamado notepad.exe.config, en la misma carpeta que el programa. Este es un archivo de configuración general para todos los aspectos de CLR y Framework, pero puede contener su propia configuración en un nodo <appSettings>.

El elemento <appSettings> crea una colección de pares de nombre-valor a los que se puede acceder como System.Configuration.ConfigurationSettings.AppSettings. Sin embargo, no hay forma de guardar los cambios en el archivo de configuración.

También es posible agregar sus propios elementos personalizados a un archivo de configuración, por ejemplo, para definir una configuración estructurada, creando una clase que implementa IConfigurationSectionHandler y agregándola al elemento <configSections> del archivo de configuración. A continuación, puede acceder a él llamando al ConfigurationSettings.GetConfig.

.NET 2.0 agrega una nueva clase, System.Configuration.ConfigurationManager, que admite varios archivos, con anulaciones por usuario de los datos por sistema. También admite guardar configuraciones modificadas en archivos de configuración.

Visual Studio crea un archivo llamado App.config, que copia en la carpeta EXE, con el nombre correcto, cuando se genera el proyecto.

62

Aclaración de las respuestas anteriores ...

1) añadir un nuevo archivo a su proyecto (Agregar-> Nueva Item-> Aplicación archivo de configuración)

2) El nuevo archivo de configuración aparecerá en la Solución Explorer como App.Config.

3) Añadir la configuración en este archivo utilizando el siguiente como plantilla

<configuration> 
    <appSettings> 
    <add key="setting1" value="key"/> 
    </appSettings> 
    <connectionStrings> 
    <add name="prod" connectionString="YourConnectionString"/> 
    </connectionStrings> 
</configuration> 

4) Recuperar ellos de esta manera:

private void Form1_Load(object sender, EventArgs e) 
{ 
    string setting = ConfigurationManager.AppSettings["setting1"]; 
    string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString; 
} 

5) Cuando se construyó, la carpeta de salida contendrá una archivo llamado <assemblyname> .exe.config Esta será una copia del archivo App.Config. El desarrollador no debe realizar más trabajos para crear este archivo.

+0

Esto me fue útil. Otros dos puntos: al agregar el nuevo archivo al proyecto, se encontró el archivo de configuración de la aplicación cuando hice clic en el nodo general en el lado izquierdo del cuadro de diálogo. Para utilizar la clase ConfigurationManager en mi código, tuve que agregar el archivo DLL System.Configuration a mis referencias. –

2

Estoy de acuerdo con las otras respuestas que le señalan a app.config. Sin embargo, en lugar de leer valores directamente desde app.config, debe crear una clase de utilidad (AppSettings es el nombre que uso) para leerlos y exponerlos como propiedades. La clase AppSettings se puede usar para agregar configuraciones de varias tiendas, como los valores de la aplicación.configuración y la información de la versión de la aplicación desde el ensamblado (AssemblyVersion y AssemblyFileVersion).

25

A partir de una lectura rápida de las respuestas anteriores, se ven correctas, pero no parece que alguien haya mencionado las nuevas instalaciones de configuración en VS 2008. Todavía utiliza app.config (copiado en tiempo de compilación a YourAppName.exe. config), pero hay un widget UI para establecer propiedades y especificar sus tipos. Haga doble clic en Configuraciones en la carpeta "Propiedades" de su proyecto.

La mejor parte es que acceder a esta propiedad desde el código es seguro: el compilador detectará errores obvios como escribir mal el nombre de la propiedad. Por ejemplo, una propiedad llamada myConnectionString en app.config se accede como:

string s = Properties.Settings.Default.MyConnectionString; 
+0

Esto estaba disponible en VS2005. –

+5

Bueno, pero (Project Properties | Settings) genera código que debe compilarse. Si desea cambiar una configuración, debe liberar nuevos binarios para el cliente. – JohnL4

1

System.Configuration.ConfigurationSettings.AppSettings [ "MyKey"];

AppSettings ha quedado obsoleto y ahora se considera obsoleto. [link]

Además, la sección appSettings de la aplicación.config ha sido reemplazada por la sección applicationSettings.

Como alguien ha mencionado, usted debe utilizar System.Configuration.ConfigurationManager [link] que es nuevo para .Net 2.0

2

Una forma muy sencilla de hacer esto es utilizar su your own custom Settings class.

+0

+1 para el enlace menos detallado a ApplicationSettings en http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.aspx que parece más simple que las implementaciones de ConfigurationManager. Obtenga/configure ajustes, no se preocupa por "XML Shaping". – maxwellb

Cuestiones relacionadas