Cuando se usa un archivo Settings.settings en .NET, ¿dónde se almacena realmente la configuración?

100

Cuando se usa un archivo Settings.settings en .NET, ¿dónde se almacena realmente la configuración? Quiero eliminar la configuración guardada para volver al estado predeterminado, pero no puedo encontrar dónde está almacenada ... ¿alguna idea?

Adam Haile
fuente

Respuestas:

100

Depende de si la configuración que ha elegido está en el alcance "Usuario" o en el alcance "Aplicación".

Alcance del usuario

La configuración del alcance del usuario se almacena en

C: \ Documents and Settings \ username \ Local Settings \ Application Data \ ApplicationName

Puede leerlos / escribirlos en tiempo de ejecución.

Para Vista y Windows 7, la carpeta es

C: \ Users \ username \ AppData \ Local \ ApplicationName

o

C: \ Users \ username \ AppData \ Roaming \ ApplicationName

Ámbito de aplicación

La configuración del alcance de la aplicación se guarda en AppName.exe.configy es de solo lectura en tiempo de ejecución.

SoluciónYogi
fuente
20
La carpeta para la configuración del ámbito de usuario en Vista y Win7 es C: \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version o C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version dependiendo de el valor de la propiedad Roaming en el panel Configuración.
jakdep
4
a menos que sea un complemento, en cuyo caso será AppName.dll.config
Tipo anónimo
4
Mi user.config local en Windows 7 está en C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder
53

Aquí está el fragmento que puede usar para obtener mediante programación la ubicación del archivo user.config:

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (es decir, settings.settings) utiliza PerUserRoamingAndLocal para la configuración del usuario de forma predeterminada (como recordaba).

Actualización: extraño, pero hay demasiadas respuestas incorrectas aquí. Si está buscando su archivo de configuración de ámbito de usuario (user.config), se ubicará en la siguiente carpeta (para Windows XP):

C: \ Documents and Settings \ (nombre de usuario) \ Local Settings \ Application Data \ (nombre de la empresa si existe) \ (nombre de la aplicación) .exe_ (Url | StrongName) _ (hash) \ (versión de la aplicación) \

Url o StrongName depende de si su aplicación ensambla un nombre seguro o no.

árbitro
fuente
¿Alguna idea de lo que contribuye al hash en ese camino? Cada versión posterior de mi aplicación obtiene un valor hash diferente, lo que hace que llamar a ApplicationSettingsBase.Upgrade () sea inútil. : /
Mal Ross
2
Hash es el hash SHA1 de StrongName cuando la aplicación está firmada o la ruta cuando la aplicación no está firmada. Más aquí msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
árbitro
20

Suponiendo que está hablando de escritorio y no de aplicaciones web:

Cuando agrega configuraciones a un proyecto, VS crea un archivo con el nombre app.configen el directorio de su proyecto y almacena la configuración en ese archivo. También construye elSettings.cs archivo que proporciona los accesos estáticos a las configuraciones individuales.

En el momento de la compilación, VS copiará (de forma predeterminada; puede cambiar esto) app.configen el directorio de compilación, cambiando su nombre para que coincida con el ejecutable (por ejemplo, si su ejecutable tiene un nombre foo.exe, el archivo se nombrará foo.exe.config), que es el nombre. El administrador de configuración de .NET busca cuándo recupera la configuración en tiempo de ejecución.

Si cambia una configuración a través del editor de configuración de VS, actualizará tanto app.configy Settings.cs. (Si observa los descriptores de acceso de propiedad en el código generado en Settings.cs, verá que están marcados con un atributo que contiene el valor predeterminado de la configuración que está en su app.configarchivo). Si cambia una configuración editando el app.configarchivo directamente, Settings.csno se actualizará, pero su programa seguirá utilizando el nuevo valor cuando lo ejecute, porque app.configse copia foo.exe.configen el tiempo de compilación. Si desactiva esta opción (configurando las propiedades del archivo), puede cambiar una configuración editando directamente el foo.exe.configarchivo en el directorio de compilación.

Luego están las configuraciones de ámbito de usuario.

La configuración del alcance de la aplicación es de solo lectura. Su programa puede modificar y guardar configuraciones de alcance de usuario, permitiendo así que cada usuario tenga su propia configuración. Estas configuraciones no se almacenan en el foo.exe.configarchivo (ya que en Vista, al menos, los programas no pueden escribir en ningún subdirectorio deProgram Files sin elevación); se almacenan en un archivo de configuración en el directorio de datos de la aplicación del usuario.

La ruta a ese archivo es %appdata%\%publisher_name%\%program_name%\%version%\user.config, por ejemplo C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Tenga en cuenta que si le ha dado a su programa un nombre seguro, el nombre seguro se agregará al nombre del programa en esta ruta.

Robert Rossney
fuente
1
Parece que el componente My_Company de la ruta estará predeterminado en Microsoft. Todavía no he encontrado una manera de cambiar esto que realmente funcione, si alguien sabe, sería bueno agregarlo.
1
user565869, ¿lo ha probado en Visual Studio, ha abierto la pestaña de aplicación de la propiedad del proyecto, ha hecho clic en el botón de información de montaje y debería poder cambiar de empresa? repita eso para cada proyecto en su solución
gg89
15

Mientras navegaba para averiguar sobre el hash en el nombre de la carpeta, me encontré (a través de esta respuesta ):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(editar: enlace de Wayback Machine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

La ruta exacta de los user.configarchivos se parece a esto:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

dónde

<Profile Directory>- es el directorio de perfil de itinerancia o el local. La configuración se almacena de forma predeterminada en el user.configarchivo local . Para almacenar una configuración en el user.configarchivo de itinerancia , debe marcar la configuración con SettingsManageabilityAttributecon SettingsManageabilityestablecido en Roaming.

<Company Name>- es típicamente la cadena especificada por AssemblyCompanyAttribute(con la advertencia de que la cadena se escapa y se trunca según sea necesario, y si no se especifica en el ensamblado, tenemos un procedimiento de reserva).

<App Name>- es normalmente la cadena especificada por AssemblyProductAttribute(las mismas advertencias que para el nombre de la empresa).

<Evidence Type>e <Evidence Hash>- información derivada de la evidencia del dominio de la aplicación para proporcionar el dominio de la aplicación y el aislamiento del ensamblaje adecuados.

<Version>- normalmente la versión especificada en AssemblyVersionAttribute. Esto es necesario para aislar diferentes versiones de la aplicación implementadas en paralelo.

El nombre del archivo siempre es simplemente ' user.config'.

buscador
fuente
Desafortunadamente, el enlace del blog está roto. Estoy seguro de que hubiera sido interesante.
UweBaemayr
3

Está en una carpeta con el nombre de su aplicación en la carpeta Datos de la aplicación en la carpeta de inicio del usuario (C: \ documentos y configuraciones \ usuario en xp yc: \ usuarios \ usuario en Windows Vista).

También hay información aquí .

PD: ¡intenta acceder a él por% appdata% en el cuadro de ejecución!

TheVillageIdiot
fuente
2

Erm, ¿no puedes simplemente usar Settings.Default.Reset () para restaurar tu configuración predeterminada?

Kildareflare
fuente
1

Todas sus configuraciones se almacenan en el archivo .config respectivo.

El archivo .settings simplemente proporciona una clase fuertemente tipada para un conjunto de configuraciones que van juntas, pero las configuraciones reales se almacenan en app.config o en un archivo .config en su aplicación.

Si agrega un archivo .settings, se agregará automáticamente un archivo app.config para albergar la configuración si aún no tiene uno.

Praveen Angyan
fuente
1

Si su archivo de configuración está en una aplicación web, estarán en el archivo web.config (justo debajo de su proyecto. Si están en cualquier otro tipo de proyecto, estarán en el archivo app.config (también debajo de su proyecto) .

Editar

Como se señala en los comentarios: la configuración de la aplicación de tiempo de diseño está en un archivo app.config para aplicaciones distintas de las aplicaciones web. Al compilar, el archivo app.config se copia en el directorio de salida y se llamará yourexename .exe.config. En tiempo de ejecución, solo se leerá el archivo llamado yourexename.exe.config.

JMarsch
fuente
1
Incorrecto. No hay un archivo de configuración de app.config en la aplicación en ejecución, porque app.config cambiará de nombre a [nombre de la aplicación] .exe.config. Y de todos modos, este archivo contendrá solo la configuración ApplicationScoped de settings.settins.
árbitro
@arbiter: Quizás entendí mal la pregunta, pero Adam parecía estar preguntando sobre los valores predeterminados en tiempo de diseño. Estos se almacenan en app.config. En el momento de la compilación, el archivo app.config se copia en el directorio de compilación y se le cambia el nombre a (theapp.exe.config). Sin embargo, si edita ese archivo directamente (y está trabajando en Visual Studio), corre el riesgo de que el contenido se sobrescriba la próxima vez que compile. En pocas palabras: para una aplicación implementada (o si se está ejecutando fuera del IDE), cambie el archivo name.exe.config). Si está trabajando en VS, cambie el valor predeterminado en la configuración o app.config
JMarsch
0

Dos archivos: 1) Un archivo app.config o web.config. La configuración se puede personalizar después de la construcción con un editor de texto. 2) El archivo settings.designer.cs. Este archivo tiene un código autogenerado para cargar la configuración desde el archivo de configuración, pero un valor predeterminado también está presente en caso de que el archivo de configuración no tenga la configuración particular.

Frank Schwieterman
fuente
0

Sé que ya está respondida, pero ¿no podría simplemente sincronizar la configuración en el diseñador de configuraciones para volver a la configuración predeterminada?

jrsconfitto
fuente