Lorsque vous utilisez un fichier Settings.settings dans .NET, où la configuration est-elle réellement stockée?

100

Lorsque vous utilisez un fichier Settings.settings dans .NET, où la configuration est-elle réellement stockée? Je souhaite supprimer les paramètres enregistrés pour revenir à l'état par défaut, mais je ne trouve pas où ils sont stockés ... des idées?

Adam Haile
la source

Réponses:

100

Cela dépend si le paramètre que vous avez choisi est à la portée "Utilisateur" ou "Application".

Portée utilisateur

Les paramètres d'étendue de l'utilisateur sont stockés dans

C: \ Documents and Settings \ nom d'utilisateur \ Local Settings \ Application Data \ ApplicationName

Vous pouvez les lire / les écrire au moment de l'exécution.

Pour Vista et Windows 7, le dossier est

C: \ Users \ nom d'utilisateur \ AppData \ Local \ ApplicationName

ou

C: \ Users \ nom d'utilisateur \ AppData \ Roaming \ ApplicationName

Champ d'application

Les paramètres d'étendue de l'application sont enregistrés dans AppName.exe.configet sont en lecture seule au moment de l'exécution.

SolutionYogi
la source
20
Le dossier des paramètres de portée utilisateur sur Vista et Win7 est C: \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version ou C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version en fonction de la valeur de la propriété Itinérance dans le volet Paramètres.
jakdep
4
sauf si c'est un addin, auquel cas ce sera AppName.dll.config
Type anonyme
4
Mon user.config local sur Windows 7 est dans C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder
53

Voici l'extrait que vous pouvez utiliser pour obtenir par programme l'emplacement du fichier user.config:

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

ApplicationSettings (c'est-à-dire settings.settings) utilise PerUserRoamingAndLocal pour les paramètres utilisateur par défaut (comme je me souviens).

Mise à jour: étrange mais il y a trop de réponses incorrectes ici. Si vous recherchez votre fichier de paramètres de portée utilisateur (user.config), il sera situé dans le dossier suivant (pour Windows XP):

C: \ Documents and Settings \ (nom d'utilisateur) \ Local Settings \ Application Data \ (company-name-if-exists) \ (app-name) .exe_ (Url | StrongName) _ (hash) \ (app-version) \

L'URL ou StrongName dépend de votre nom fort de l'assembly d'application ou non.

arbitre
la source
Une idée de ce qui contribue au hachage dans ce chemin? Chaque version ultérieure de mon application reçoit une valeur de hachage différente, ce qui rend l'appel ApplicationSettingsBase.Upgrade () inutile. : /
Mal Ross
2
Le hachage est le hachage SHA1 de StrongName lorsque l'application est signée ou le chemin d'accès lorsque l'application n'est pas signée. Plus ici msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
arbitre
20

En supposant que vous parlez de bureau et non d'applications Web:

Lorsque vous ajoutez des paramètres à un projet, VS crée un fichier nommé app.configdans votre répertoire de projet et stocke les paramètres dans ce fichier. Il crée également le Settings.csfichier qui fournit les accesseurs statiques aux paramètres individuels.

Au moment de la compilation, VS copiera (par défaut; vous pouvez changer cela) le app.configdans le répertoire de construction, en changeant son nom pour correspondre à l'exécutable (par exemple, si votre exécutable est nommé foo.exe, le fichier sera nommé foo.exe.config), qui est le nom. NET configuration manager recherche quand il récupère les paramètres au moment de l'exécution.

Si vous modifiez un paramètre via l'éditeur de paramètres VS, il mettra à jour app.configet Settings.cs. (Si vous regardez les accesseurs de propriété dans le code généré dans Settings.cs, vous verrez qu'ils sont marqués d'un attribut contenant la valeur par défaut du paramètre qui se trouve dans votre app.configfichier.) Si vous modifiez un paramètre en modifiant app.configdirectement le fichier, Settings.csne sera pas mis à jour, mais la nouvelle valeur sera toujours utilisée par votre programme lorsque vous l'exécuterez, car elle app.configest copiée foo.exe.configau moment de la compilation. Si vous désactivez cette option (en définissant les propriétés du fichier), vous pouvez modifier un paramètre en modifiant directement le foo.exe.configfichier dans le répertoire de construction.

Ensuite, il y a les paramètres définis par l'utilisateur.

Les paramètres d'application sont en lecture seule. Votre programme peut modifier et enregistrer les paramètres de portée utilisateur, permettant ainsi à chaque utilisateur d'avoir ses propres paramètres. Ces paramètres ne sont pas stockés dans le foo.exe.configfichier (car sous Vista, au moins, les programmes ne peuvent écrire dans aucun sous-répertoire de Program Filessans élévation); ils sont stockés dans un fichier de configuration dans le répertoire de données d'application de l'utilisateur.

Le chemin vers ce fichier est %appdata%\%publisher_name%\%program_name%\%version%\user.config, par exemple C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Notez que si vous avez donné un nom fort à votre programme, le nom fort sera ajouté au nom du programme dans ce chemin.

Robert Rossney
la source
1
Il semble que le composant My_Company du chemin sera par défaut Microsoft. Je n'ai pas encore trouvé de moyen de changer cela qui fonctionne réellement, si quelqu'un sait que ce serait bien d'ajouter.
1
user565869, avez-vous essayé dans Visual Studio, ouvrez l'onglet d'application de la propriété du projet, cliquez sur le bouton Informations d'assemblage et vous devriez alors pouvoir changer de société? répétez cela pour chaque projet de votre solution
gg89
15

En naviguant pour découvrir le hachage dans le nom du dossier, je suis tombé sur (via cette réponse ):

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

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

Le chemin exact des user.configfichiers ressemble à ceci:

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

<Profile Directory>- est soit le répertoire du profil itinérant, soit le répertoire local. Les paramètres sont stockés par défaut dans le user.configfichier local . Pour stocker un paramètre dans le user.configfichier itinérant , vous devez marquer le paramètre avec le SettingsManageabilityAttributeavec SettingsManageabilityréglé sur Roaming.

<Company Name>- est généralement la chaîne spécifiée par le AssemblyCompanyAttribute(avec l'avertissement que la chaîne est échappée et tronquée si nécessaire, et si elle n'est pas spécifiée sur l'assembly, nous avons une procédure de secours).

<App Name>- est généralement la chaîne spécifiée par le AssemblyProductAttribute(mêmes mises en garde que pour le nom de l'entreprise).

<Evidence Type>et <Evidence Hash>- les informations dérivées de la preuve du domaine d'application pour fournir un domaine d'application et une isolation d'assembly appropriés.

<Version>- généralement la version spécifiée dans le AssemblyVersionAttribute. Cela est nécessaire pour isoler les différentes versions de l'application déployées côte à côte.

Le nom du fichier est toujours simplement « user.config».

chercheur
la source
Malheureusement, le lien du blog est rompu. Je suis sûr que cela aurait été intéressant.
UweBaemayr
3

Il se trouve dans un dossier portant le nom de votre application dans le dossier Application Data du dossier de base de l'utilisateur (C: \ documents and settings \ user sur xp et c: \ users \ user sous Windows Vista).

Il y a aussi quelques informations ici .

PS: - essayez d'y accéder par% appdata% dans la boîte d'exécution!

TheVillageIdiot
la source
2

Euh, ne pouvez-vous pas simplement utiliser Settings.Default.Reset () pour restaurer vos paramètres par défaut?

Kildareflare
la source
1

Tous vos paramètres sont stockés dans le fichier .config respectif.

Le fichier .settings fournit simplement une classe fortement typée pour un ensemble de paramètres qui vont ensemble, mais les paramètres réels sont stockés dans app.config ou un fichier .config dans votre application.

Si vous ajoutez un fichier .settings, un app.config sera automatiquement ajouté pour héberger les paramètres si vous n'en avez pas déjà un.

Praveen Angyan
la source
1

Si votre fichier de paramètres se trouve dans une application Web, ils seront dans le fichier web.config (juste en dessous de votre projet. S'ils sont dans un autre type de projet, ils seront dans le fichier app.config (également sous votre projet). .

Éditer

Comme indiqué dans les commentaires: les paramètres de votre application au moment de la conception se trouvent dans un fichier app.config pour les applications autres que les applications Web. Lorsque vous générez, le fichier app.config est copié dans le répertoire de sortie et sera nommé yourexename .exe.config. Lors de l'exécution, seul le fichier nommé yourexename.exe.config sera lu.

JMarsch
la source
1
Pas correcte. Il n'y a pas de fichier de paramètres app.config dans l'application en cours d'exécution, car app.config sera renommé en [appname] .exe.config. Et de toute façon, ce fichier ne contiendra que les paramètres ApplicationScoped de settings.settins.
arbitre le
@arbiter: J'ai peut-être mal compris la question, mais Adam semblait poser des questions sur les valeurs par défaut au moment du design. Ceux-ci sont stockés dans app.config. Au moment de la construction, le fichier app.config est copié dans le répertoire de construction et renommé en (theapp.exe.config). Cependant, si vous modifiez ce fichier directement (et que vous travaillez dans Visual Studio), vous courez le risque que le contenu soit écrasé la prochaine fois que vous construisez. Bottom line: pour une application déployée (ou si vous exécutez en dehors de l'EDI), modifiez le fichier name.exe.config). Si vous travaillez dans VS, modifiez la valeur par défaut dans les paramètres ou app.config
JMarsch
0

Deux fichiers: 1) Un fichier app.config ou web.config. Les paramètres peuvent être personnalisés après la construction avec un éditeur de texte. 2) Le fichier settings.designer.cs. Ce fichier a un code généré automatiquement pour charger le paramètre à partir du fichier de configuration, mais une valeur par défaut est également présente au cas où le fichier de configuration n'aurait pas le paramètre particulier.

Frank Schwieterman
la source
0

Je sais qu'il a déjà répondu, mais ne pouviez-vous pas simplement synchroniser les paramètres dans le concepteur de paramètres pour revenir à vos paramètres par défaut?

jrsconfitto
la source