2009-06-11 21 views
105

Pensé que sabía esto, pero hoy estoy demostrando que estoy equivocado, nuevamente.¿Dónde se almacenan las propiedades. Configuración predeterminada?

Ejecutando VS2008, .NET 3.5 y C#. He añadido la configuración de usuario a la pestaña Configuración de propiedades con valores por defecto, y luego los lee en el uso de este código:

myTextBox.Text = Properties.Settings.Default.MyStringProperty; 

Entonces, después de que el usuario edita el valor de las opciones de diálogo lo guardo como esto:

Properties.Settings.Default.MyStringProperty = myTextBox.Text; 
Properties.Settings.Default.Save(); 

Mi pregunta es, ¿dónde se guarda este nuevo valor? el archivo MyApp.exe.config en el directorio ejecutable no se actualiza, aún contiene los valores predeterminados. Además, por lo que puedo decir, ninguno de los otros archivos en ese directorio se actualiza tampoco! Sin embargo, cuando el programa vuelve a leer el valor, obtiene el valor modificado, así que sé que está guardado en algún lugar ...

Esto no es solo académico, necesitaba poder editar manualmente el valor esta mañana y me quedé perplejo cuando no pude encontrar nada que estuviera cambiando.

+0

Es importante tener en cuenta que la ubicación de almacenamiento puede cambiar entre diferentes versiones del marco o el sistema operativo. No codifique nada programático en la ubicación de almacenamiento. –

+0

Si está en Visual Studio, desarrolla una nueva aplicación y luego comprueba en AppData \ Local \ Microsoft \ SU NOMBRE DE APLICACIÓN El nombre de archivo es user.config. Estoy en Windows 7 – JenonD

Respuesta

102

Para trabajar con las versiones más recientes de la política de Windows de permitir el acceso de lectura por defecto a la carpeta Archivos de programa (a menos que solicite elevación con UAC, pero ese es otro tema ...), su aplicación tendrá un carpeta de configuración bajo %userprofile%\appdata\local o %userprofile%\Local Settings\Application Data según la versión de Windows que esté ejecutando, para las configuraciones que son específicas del usuario. Si almacena configuraciones para todos los usuarios, estarán en la carpeta correspondiente debajo de C:\users o C:\Documents and Settings para todos los perfiles de usuario (ej .: C:\users\public\appdata\local).

+2

Además, el .config generado en Visual Studio, que termina en la carpeta del ejecutable, creo que solo se usa para la depuración.Al empaquetar la aplicación final, no incluye este .config, ya que se genera la primera vez que el usuario ejecuta la aplicación. –

+10

¿Versiones más nuevas? Este ha sido el caso desde Windows 2000. Acabas de salirte con la tuya porque estabas corriendo como administrador. –

+0

Eso lo hace. Tiene mucho sentido ahora que me lo explicaron, no estoy seguro de por qué no lo "entendí" antes, pero ... De todos modos, la tuya fue la primera y más completa explicación, así que obtienes los puntos. – DaveN59

0

Las configuraciones específicas del usuario se guardan en la carpeta de datos de aplicación del usuario para esa aplicación. Busque un archivo user.config.

No sé lo que esperaba, ya que los usuarios a menudo ni siquiera tienen acceso de escritura al directorio ejecutable en primer lugar.

-11

Hay una carpeta llamada "Propiedades" debajo de la carpeta raíz del proyecto, y hay un archivo * .settings debajo de esa carpeta. Ahí es donde se almacena.

+6

esto está mal. el valor predeterminado se almacena allí no los usuarios cambiaron el valor .. –

+0

es correcto _during developement_. Después del despliegue, van a otro lado. –

+0

tuve esto ejecutándose en un entorno de desarrollo y el archivo no se modificó. solo almacena el valor predeterminado allí, no el actualizado. –

4

se guarda en sus Documents and Settings \% usuario% \ Configuración local \ Datos de programa, etc ...... buscar un archivo llamado user.config no

la ubicación puede cambiar sin embargo.

+5

En realidad, la variable de entorno correcta para las propiedades específicas del usuario es% userprofile%. Especificar documentos y configuraciones en Vista o 7 dará como resultado una carpeta faltante o permisos faltantes a la carpeta que encuentra. – jasonh

55

Puede obtener la ruta mediante programación:

using System.Configuration; // Add a reference to System.Configuration.dll 
... 
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath; 
+1

Hmm, estoy viendo situaciones en las que la ruta devuelta por este NO es la ruta utilizada por Configuración. ¿Alguna idea? –

+1

@GeorgeMauer ¿Quiere decir 'Roaming' o quizás' LocalLow' en lugar de 'Local'? 'ConfigurationUserLevel' depende de que el perfil del usuario sea itinerante o local. En las empresas, a menudo es itinerante. –

+0

Enlazando a [esta respuesta] (http://stackoverflow.com/a/1804324/344541) y mis comentarios debajo, mostrando cómo se ve la ruta. –

Cuestiones relacionadas