.net appsettings settings.settings

¿Cuándo usar.NET Settings vs config<appsettings>?



settings.settings (9)

¿Hay recomendaciones sobre cuándo usar la configuración de la aplicación (no la configuración del usuario) en comparación con el archivo .config <appsettings>?

Actualizar
Buscando entender algunas de las diferencias más importantes e importantes, ya que ambas son efectivamente tiendas clave / valor. Por ejemplo, sé que la modificación de las aplicaciones en web.config reciclará la aplicación web.

Los ajustes han estado en .NET por un tiempo y no me he molestado en mirarlos, tal vez uno sea algo redundante, o usar ambos al mismo tiempo no tiene sentido ... ese es el tipo de detalle que estoy Buscando entender y las razones.


Algo que he hecho antes es crear una clase que contenga las propiedades apropiadas para la configuración que se va a conservar. A continuación, una instancia de clase se serializa en XML a un archivo y luego se puede deserializar para recuperar el mismo objeto, con los valores de propiedad intactos. Y la aplicación no tendrá que ser reciclada, como lo haría si escribiera en el archivo web.config / app.config.

Puede obtener una configuración de aplicación fuertemente tipada de esta manera, y no tiene que preocuparse por las claves y los valores. Esto me ha funcionado bastante bien cuando quería proporcionar opciones configurables por el usuario dentro de la aplicación.


Creé una aplicación de prueba para explorar, ya que nunca me he molestado en mirar la configuración. Aquí hay algunos resultados aleatorios.

  • La configuración le proporciona una propiedad / nombre explícito para hacer referencia en su código, pero si desarma la aplicación compilada, el captador simplemente busca el valor en su diccionario interno.
  • Las configuraciones se repiten en su archivo .config en su propia sección. Parece que podría simplemente editar el archivo .config para cambiar el valor, pero este no es el caso, tal como se explica en el siguiente punto.
  • De acuerdo con la documentación vinculada anteriormente, parece que la única forma de obtener el valor es usar Properties.Settings.Default.myColor = Color.AliceBlue; pero esto siempre le da el valor predeterminado, que se compila en su código como un atributo para la propiedad. (Lo verifiqué utilizando Reflector. El captador está etiquetado con lo siguiente: [ApplicationScopedSetting, DefaultSettingValue("asdf"), DebuggerNonUserCode] ).
  • Los ajustes están fuertemente escritos. El compilador se encargará de la serialización de los objetos automáticamente (sin embargo, esto es solo unas pocas líneas de código).

En general, parecen EXTREMADAMENTE similares. El cuadro de diálogo Configuración le dará una forma de diseño para configurar los valores en el momento del diseño, para lo que valga. También manejará la serialización para su también. Estoy seguro de que hay una manera de obtener el valor real en lugar del valor predeterminado, lo que sería una buena manera de deshacer las personalizaciones de los usuarios si eso es lo que está almacenando (IE, en lugar de usar el valor actual, solo haga referencia al valor predeterminado Sin embargo, actualmente no sé cómo hacer referencia al valor actual.


La configuración de la aplicación se puede escribir, lo que es una ventaja en comparación con las configuraciones de aplicaciones. Y la forma en que puede acceder a ellos es un poco más ordenada (propiedad) y luego obtiene un valor de una matriz.

Y puede utilizar la interfaz para implementar una clase de configuración que almacena su configuración en una base de datos.


La configuración de la aplicación y las secciones de configuración del archivo de configuración están limitadas a pares de valores clave, que son buenos para la configuración simple, pero si necesita una persistencia de datos que sea más sólida, puede crear una sección de configuración personalizada para su aplicación. Aquí está el artículo de sobre la creación de una sección de configuración personalizada

¡Disfrutar!


La pregunta es un poco antigua, pero me topé con ella y pensé agregar algo de claridad en caso de que alguien más también la encontrara ...

La opción de configuración (a diferencia de la sección <appSettings>) tiene un soporte sólido en el marco:

  1. Los ajustes se escriben con fuerza (es decir, bool, int, ConnectionString, etc.) en lugar de que se devuelvan todos como una cadena para que su código los analice si es necesario.

  2. Las configuraciones se pueden considerar como a) internas o públicas, yb) por usuario o por aplicación (esta última significa esencialmente por máquina).

  3. Su aplicación tendría que proporcionar su propia interfaz para cambiar la configuración, pero eso es bastante trivial ya que las propiedades de configuración son de lectura / escritura en el código, y la clase generada proporciona funcionalidad para guardar los cambios.

  4. El archivo app.config (o web.config) que se implementa, solo almacena los valores predeterminados (vea a continuación cómo se manejan los cambios en el tiempo de ejecución), lo que significa que cambiar la configuración y guardarlos en el tiempo de ejecución no cambia el archivo .config. y por extensión no provoca un reinicio de su aplicación.

  5. Los cambios en el tiempo de ejecución se guardan en una ubicación local (en algún lugar en c: / ProgramData .. o c: / Users / MyUser / AppData / Local ..) según el alcance elegido. Como tal, las versiones posteriores de su aplicación pueden introducir nuevas configuraciones de forma segura sin temor a destruir valores previamente personalizados, ya que se almacenan de forma segura.

Espero que ayude a aclarar un poco las cosas.


Los ajustes de la aplicación no se compilan en el ensamblaje.

No estoy seguro, pero creo que los valores predeterminados de la Configuración de la aplicación se compilan en el ensamblaje, pero estos pueden anularse en el archivo de configuración.

Creo que la configuración de la aplicación se creó como una forma más amigable de hacerlo, especialmente desde VB.Net, pero no creo que haya grandes diferencias. Al menos para configuraciones simples, prefiero Configuraciones de aplicaciones por las razones en la respuesta de LeonG.


Un punto que parece ser pasado por alto por las respuestas hasta ahora es que los archivos .config pueden transformarse utilizando archivos de transformación . Estos están disponibles para los archivos Web.config de forma predeterminada (en Visual Studio) y están habilitados para archivos .config arbitrarios con el complemento SlowCheetah - XML ​​Transforms para Visual Studio (SlowCheetah también agrega una vista previa y aplica transformaciones en la compilación en lugar de solo en desplegar


Una cosa a tener en cuenta es que, si está implementando a través de ClickOnce, a pesar del hecho de que los archivos de configuración ahora se pueden escribir, no están en una aplicación implementada por ClickOnce, ya que eso se complica con los hashes de archivos.

Por lo tanto, la regla de oro es que todo lo que sea configuración de entorno va en app.config. Cualquier cosa que sea la configuración del usuario va en Configuración.

A veces, la línea es un poco borrosa, por lo que para los borrosos la envolvería en un método de acceso estático para que pueda moverlos a voluntad.


Utilizo la configuración del archivo .config (web.config) para casi todo lo que podría cambiar después de compilar y liberar el código. Está bien porque puedes cambiarlo fácilmente. No estoy familiarizado con la configuración de las aplicaciones, pero parece que es posible que tenga que volver a compilar la aplicación si la cambia.