La forma más sencilla de tener un archivo de configuración en una aplicación de Windows Forms C #

88

Soy realmente nuevo en .NET, y todavía no entendía cómo funcionan los archivos de configuración.

Cada vez que lo busco en Google, obtengo resultados sobre web.config, pero estoy escribiendo una aplicación de Windows Forms.

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

¿Cómo defino que mi archivo de configuración es 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 un archivo de configuración con algunos valores como este:

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

¿Existe una forma sencilla de hacerlo? ¿Puede explicar de forma sencilla cómo leer y escribir desde / hacia un archivo de configuración simple?

Fabio Gomes
fuente
1
¿Cuál es tu versión de .NET? Para 2.0 y superior, hay una forma muy linda llamada Configuración.
Thomas
1
@Siete fue un error tipográfico, pero podría significar "Explica con un ejemplo" :)
Fabio Gomes

Respuestas:

121

Quiere utilizar una App.Config.

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

Luego agrega claves en la sección de configuración / configuración de aplicaciones

Me gusta:

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

Accede a los miembros haciendo

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

Esto funciona en .NET 2 y superior.

qui
fuente
2
En realidad, funciona en todas las versiones de .NET, desde la v1.0 en adelante. La nueva clase en .NET 2.0 es ConfigurationManager.
Mike Dimmick
4
Yo personalmente uso la pestaña "Configuración" en las "Propiedades de la aplicación" (Framework 2.0 en adelante solamente) porque Visual Studio codificará propiedades fuertemente tipadas para su configuración. También pueden incluir configuraciones de "Usuario" que son de lectura / escritura en tiempo de ejecución.
Adrian Clark
@ Mike, sí, tenía la sensación de que ese era el caso, pero no estaba muy seguro. No he trabajado mucho con 1.
qui
26
Tenga en cuenta que ConfigurationSettingsestá obsoleto, use System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF
16
También una nota, para usar System.Configuration.ConfigurationManagersu proyecto necesita una referencia aSystem.Configuration.dll
dmeglio
66

Aclaración de respuestas anteriores ...

  1. Agregue un nuevo archivo a su proyecto ( AgregarNuevo elementoArchivo de configuración de la aplicación )

  2. El nuevo archivo de configuración aparecerá en el Explorador de soluciones como App.Config .

  3. Agregue su configuración a este archivo usando lo siguiente como plantilla

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. Recupéralos así:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. Cuando se construya, su carpeta de salida contendrá un archivo llamado <nombre de ensamblaje> .exe.config. Esta será una copia del archivo App.Config . El desarrollador no debe realizar ningún trabajo adicional para crear este archivo.

ZombieOvejas
fuente
1
Esto me resultó ú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 diálogo. Para usar la clase ConfigurationManager en mi código, tuve que agregar la DLL System.Configuration a mis referencias.
John Gilmer
28

De una lectura rápida de las respuestas anteriores, se ven correctas, pero no parece que nadie haya mencionado las nuevas funciones de configuración en Visual Studio 2008. Todavía usa app.config (copiado en tiempo de compilación a YourAppName.exe.config), pero hay un widget de interfaz de usuario para establecer propiedades y especificar sus tipos. Haga doble clic en Settings.settings en la carpeta "Propiedades" de su proyecto.

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

string s = Properties.Settings.Default.MyConnectionString;
maxfurni
fuente
Esto estaba disponible en VS2005.
Greg D
5
Bien, pero (Propiedades del proyecto | Configuración) genera código que debe compilarse. Si desea cambiar una configuración, debe publicar nuevos binarios para el cliente.
JohnL4
@ JohnL4 si estos valores están en el ámbito de "usuario", entonces se puede cambiar mediante programación, por ejemploSettings.Default.Test = "abc"; Settings.Default.Save();
Peet británicos
10

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

Debe hacer clic derecho en su proyecto, agregar un nuevo elemento y elegir un nuevo "Archivo de configuración de la aplicación" .

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

Entonces puedes agregarle valores:

<?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;
    }

Solo una nota: según Microsoft , debe usar ConfigurationManager en lugar de ConfigurationSettings (consulte la sección de comentarios):

"La clase ConfigurationSettings solo proporciona compatibilidad con versiones anteriores. Para aplicaciones nuevas, debe usar la clase ConfigurationManager o la clase WebConfigurationManager en su lugar".

Nathan Koop
fuente
Muy útil. Solucionado mi problema a la T.
JCMorris
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 <appSettings>nodo.

El <appSettings>elemento crea una colección de pares 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 implemente IConfigurationSectionHandlery agregándola al <configSections>elemento del archivo de configuración. A continuación, puede acceder a él llamando ConfigurationSettings.GetConfig.

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

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

Mike Dimmick
fuente
6

El mejor artículo (en mi humilde opinión) sobre la configuración de la aplicación .NET está en CodeProject, Unraveling the Mysteries of .NET 2.0 Configuration . Y mi siguiente artículo favorito (más corto) sobre secciones en los archivos de configuración .NET es Comprensión de los controladores de sección: archivo App.config .

TcKs
fuente
Realmente no es la forma más sencilla que pide el usuario, pero Desentrañar los misterios de las configuraciones de .NET 2.0 son realmente una gran serie de artículos.
Ricardo Amores
3

En Windows Forms, tiene el app.configarchivo, que es muy similar al web.configarchivo. Pero como veo que lo necesitas son valores personalizados, te sugiero que uses Configuración .

Para hacer eso, abra las propiedades de su proyecto y luego vaya a configuración. Si no existe un archivo de configuración, tendrá un enlace para crear uno. Luego, puede agregar la configuración a la tabla que ve allí, lo que generaría tanto el XML apropiado como una clase de Configuración que se puede usar para cargar y guardar la configuración.

La clase de configuración se llamará algo así como DefaultNamespace.Properties.Settings. Luego, puede usar 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;
        }
    }
}
configurador
fuente
2

Estoy de acuerdo con las otras respuestas que le apuntan 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 app.config y la información de la versión de la aplicación del ensamblado (AssemblyVersion y AssemblyFileVersion).

Jamie Ide
fuente
1

Utilizar:

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

AppSettings ha quedado obsoleta y ahora se considera obsoleta ( enlace ).

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

Como alguien más mencionó, debería usar System.Configuration.ConfigurationManager ( enlace ), que es nuevo para .NET 2.0.

Edward Manning
fuente
ConfigurationSettings está en desuso, no AppSettings.
Toby
0

¿Qué versión de .NET y Visual Studio estás usando?

Cuando creó el nuevo proyecto, debería tener un archivo en su solución llamado app.config . Ese es el archivo de configuración predeterminado.

Geoff
fuente