App.config: usuario vs ámbito de aplicación

90

He agregado el archivo App.config en mi proyecto. He creado dos configuraciones desde Proyecto> Propiedades> panel Configuración -

ingrese la descripción de la imagen aquí

Me di cuenta de que cuando agrego una configuración, puedo definir el alcance como Usero Application. -

  1. Usuario
  2. Solicitud

Si defino la configuración a medida Userque va a la userSettingssección,
si defino la configuración a medida Applicationque va a la applicationSettingssección

App.config

<configuration>

    <userSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting1" serializeAs="String">
                <value>Value1</value>
            </setting>
        </DemoApp.Properties.Settings>
    </userSettings>

    <applicationSettings>
        <DemoApp.Properties.Settings>
            <setting name="MySetting2" serializeAs="String">
                <value>Value2</value>
            </setting>
        </DemoApp.Properties.Settings>
    </applicationSettings>

</configuration>

Pero, se puede acceder a estas configuraciones de la misma manera desde .cs:

Código

string mySetting1 = DemoApp.Properties.Settings.Default.MySetting1;
string mySetting2 = DemoApp.Properties.Settings.Default.MySetting2;

¿Cuál es la diferencia entre el Usery el Applicationalcance y bajo qué circunstancias se debe optar entre estos dos?

Parag Meshram
fuente

Respuestas:

72

Básicamente, la configuración de la aplicación no se puede cambiar durante la ejecución de un programa y la configuración del usuario sí. Esta configuración de usuario debe guardarse para que el usuario tenga una experiencia familiar cuando ejecute la aplicación a continuación.

Editar: por ejemplo, puede escribir su aplicación con diferentes módulos y debe asegurarse de que su módulo principal esté usando la versión correcta de su módulo de seguridad. Para esto, debe configurar una configuración de alcance de aplicación, por ejemplo:

SecurityModuleVersion  string     Application      v1.21

Algún tiempo después, cuando refactorizar el módulo de seguridad, que puede cambiar el valor a v1.22 cuando se implementa para garantizar el periodo de la seguridad correcto

Por otro lado, si su aplicación tiene diferentes 'máscaras' con cambios de color, cambios de fuente, etc., entonces puede configurar una configuración de usuario como la siguiente:

ApplicationSkin        string     User              DefaultSkin

Luego, cuando Michelle cambia a la piel que prefiere, la aplicación recuerda su configuración. Las propiedades ahora pueden verse así:

ApplicationSkin        string     User              HelloKittySkin
mcalex
fuente
¿Puedes explicarlo usando un ejemplo?
Parag Meshram
1
La configuración predeterminada está en el archivo de configuración, ¿no? Pero, ¿dónde se almacenan las configuraciones de usuario guardadas?
Kyle Delaney
7
La configuración de la aplicación se guarda en el archivo * .exe.config. Las configuraciones de usuario se guardan en c: \ users \ <userid> \ AppData \ Local \ <companyname> \ <appname> \ <version> \ user.config (donde las últimas se extraen del archivo de ensamblaje). Al cargar, la configuración del usuario tiene prioridad sobre la configuración de la aplicación.
Schrodo_Baggins
71

La configuración del ámbito de la aplicación es de solo lectura y solo se puede cambiar en tiempo de diseño o modificando el archivo .exe.config entre sesiones de aplicación. Sin embargo, la configuración del ámbito de usuario se puede escribir en tiempo de ejecución, tal como cambiaría cualquier valor de propiedad. El nuevo valor persiste mientras dure la sesión de la aplicación. Puede conservar los cambios en la configuración del usuario entre sesiones de aplicación llamando al método Settings.Save.

Fuente en msdn: uso de la configuración en C #

La configuración del usuario generalmente se utiliza para mantener las preferencias del usuario (por ejemplo, preferencias de notificación de aplicaciones, etc.). La configuración de la aplicación generalmente sería para elementos como claves API, etc.

Como señaló @kmote, cuando la configuración del usuario se modifica y persiste en el tiempo de ejecución (a través de settings.Save()), se escribirá en una carpeta dentro del almacenamiento del perfil de usuario (generalmente C: \ Users \ Username \ AppData \ Local \ AppName en Windows 7 y superior ). Para determinar la ubicación del archivo mediante programación, consulte esta publicación .

CalC
fuente
cualquier ejemplo en vivo sería muy apreciado
Parag Meshram
1
También se debe señalar que la configuración del usuario no se puede cambiar editando el archivo .config entre sesiones.
kmote
@kmote ¡Por supuesto que puedes! Si la sesión está cerrada, puede cambiar la configuración (y por lo tanto el userSetting). El cambio persiste y se refleja en el programa cuando vuelves a iniciar la sesión ... Lo probé hace un momento.
Riegardt Steyn
5
@Heliac: Debería haber sido más preciso. Tiene razón en que userSettings se puede cambiar entre sesiones. SIN EMBARGO, una vez que los cambia programáticamente (usando Settings.Save()), se crea un nuevo archivo de configuración y se oculta / enterra en C: \ Users [nombre de usuario] \ AppData \ Local \ Microsoft. A partir de ese momento, siempre que se inicie la aplicación, la configuración del usuario se extraerá exclusivamente de ese archivo y se ignorará cualquier cambio realizado manualmente en App.config o Settings.settings.
kmote
¿Hay alguna forma de buscar y ver el contenido de este archivo de configuración de usuario?
Kyle Delaney