2009-05-26 14 views
67

Actualmente estoy en la fase de aprendizaje de cosas relacionadas con .NET y estaba explorando cómo guardar la aplicación. Terminé escribiendo mi propia clase que guarda la configuración en un archivo XML y luego descubrí que .NET es compatible con guardar la configuración de la aplicación.¿Cuál es la diferencia entre el archivo app.config y el archivo XYZ.settings?

Pero encontré 2 formas de hacerlo. Cuando abro el cuadro de diálogo agregar nuevo elemento en Visual Studio 2008, da la opción de crear un archivo de configuración (.settings) o un archivo de configuración (.config). ¿Cuál es la diferencia entre ambos y en qué escenario deberían usarse?

Respuesta

51

Los ajustes (Ambos de un conjunto de ajustes y Configuration.AppSettings), se almacenan en el archivo .config [junto con muchas otras cosas].

La diferencia es que las cosas .settings [que se agregaron en .NET 2.0/VS2005] capas una clase fuertemente tipada en la parte superior de un conjunto de configuraciones que pertenecen juntas mientras que Configuration.AppSettings solo le permite recuperar cadenas, lo que obliga a hacer cualquier conversión, y no tiene la noción de los valores predeterminados. (La clase de configuración realmente se ha desviado en un ensamblaje lateral para reflejar esto; necesita agregar una referencia a System.Configuration explícitamente si lo desea).

Agregar un .settings a su proyecto resultará en que se agregue una aplicación.config para alojar la configuración si usted ya no tiene una. La clase que lee la configuración se genera automáticamente cada vez que cambia la lista de configuraciones para su componente/aplicación.

Otras características de .Settings es la capacidad de designar algunas configuraciones como específicas del usuario (y también para guardar las configuraciones específicas del usuario con una sola llamada).

La mejor razón de todo para usar. La configuración general es que obtienes la capacidad de identificar claramente quién usa qué configuración en una base de código siguiendo los usos de las propiedades (y cada conjunto es un bloque separado en el archivo XML) . Configuration.appSettings es más global en su naturaleza; es solo una bolsa de propiedades y usted no sabe qué DLL, subsistema o clase depende de una entrada de configuración en particular. Ver this blog post from Steven Smith para mucho más.

Por último, si aún no ha leído lo suficiente sobre la gestión de configuraciones, no va a vencer this Rick Strahl post on the subject para la integridad o grandes cantidades de ideas y ángulos.

ASIDE: También está el material ASP.NET vNext Configuration, outlined in this article que es bastante flexible y ofrece un ángulo diferente en la gestión de configuraciones de configuración.

+0

Gracias por la respuesta. Simplemente confundido acerca de un punto: hay 2 tipos de configuraciones.Una es la configuración de la aplicación y otra es la configuración del usuario. Si ambos tipos de configuraciones se almacenan en el archivo de configuración, ¿cómo será la configuración del usuario diferente para diferentes usuarios? – Hemant

+2

Perdón por omitir mencionar eso. La configuración del usuario es uno de los motivos por los que existen valores predeterminados (si el usuario aún no ha utilizado la aplicación, los valores predeterminados se aplican hasta que se guarde un cambio). La configuración del usuario se almacena en un archivo de configuración separado en el directorio del perfil del usuario (Users \ XXX). La configuración del usuario también puede actualizarse (los del sistema no pueden usar la API predeterminada y no deberían - viven en Archivos de programa y no es posible controlar de forma segura el acceso de múltiples usuarios allí). –

+0

¿dónde encaja el administrador de configuración en todo esto? Estoy intentando y no obtengo eso para decirme dónde vive mi settings.settings y luego guardo una configuración en blanco allí –

3

Un archivo de configuración es un archivo de recursos en el que se especifican las diferentes configuraciones y su valor predeterminado.

Los valores mismos se configuran en el archivo de configuración de la aplicación (archivo .config).

Un archivo de configuración nunca se implementa, por lo que necesitará el archivo de configuración para realizar la configuración.

+0

Mientras estoy en modo exigente (solo actualicé mi propia publicación - falta mucho allí) Mientras que un archivo .settings es un archivo XML, estoy razonablemente seguro de que no está incluido como Recurso, ¿o sí? Además, los valores específicos del usuario se almacenan en un área separada, fuera del archivo .config. El archivo .config debe implementarse si tiene configuraciones no predeterminadas (los atributos dentro de la clase de configuraciones generadas administran el valor predeterminado de los valores si no se especifica nada en el archivo de configuración). –

+0

Mientras el archivo xml Settings.settings no está t implementado, el archivo Settings.Designer.cs se compila en la aplicación, ¿no es así? –

0

El archivo app.config se almacena en el mismo directorio que la aplicación. Los usuarios normales no tendrán permisos de escritura (por ejemplo, en "Archivos de programa").

El archivo de configuración debe almacenarse en el directorio "AppData" de los usuarios (donde tiene permisos r/w).

Utilice el archivo de configuración para opciones configurables por el usuario.

+0

No del todo bien, de acuerdo con otras respuestas: https://stackoverflow.com/a/909712/199364, https://stackoverflow.com/a/13072966/199364 '.settings' (y el soporte' Configuración 'de Visual Studio) se puede usar tanto para configuración de aplicación única como para configuración por usuario. '.settings' no existe en tiempo de ejecución; lo que existe en el tiempo de ejecución es 'app.config' en la carpeta de la aplicación, y [usuario]' .config' en la carpeta de datos del usuario. – ToolmakerSteve

Cuestiones relacionadas