Paramètre.paramètres vs. app.config in.NET application de bureau [dupliquer]

Double Possible:

Quelle est la différence entre l'application.fichier de configuration et XYZ.fichier de paramètres?

je suis assez confus par l'apparente redondance de ces deux mécanismes dans Visual Studio pour stocker et gérer les paramètres des applications de bureau:

  • vous pouvez utiliser le fichier XML app.config , en ajoutant des éléments à la <appSettings> section. Ceux-ci peuvent être récupérés à partir du code en utilisant la classe ConfigurationManager .
  • Alternativement, vous pouvez utiliser les Paramètres.paramètres fichier pour ajouter des paramètres individuels à travers un éditeur. Visual Studio va générer une classe Settings pour la récupération des paramètres à l'exécution.

ces deux mécanismes semblent avoir le même but (ou presque). Je suis conscient qu'il y a certaines différences, mais je suis également perplexe par le chevauchement et de ses conséquences. Par exemple, lorsque J'utilise Visual Studio pour ajouter des paramètres au fichier Settings.settings , toutes les informations que j'y mets finissent aussi par des entrées dans le fichier app.config . Apparemment, un mécanisme de synchronisation existe: si je change un paramètre dans le fichier app.config , Visual Studio me demande de mettre à jour le fichier Settings.settings la prochaine fois que je l'ouvre dans l'éditeur.

mes questions sont:

  • pourquoi deux mécanismes et pas seulement un?
  • Quels sont les scénarios les plus courants pour l'utilisation de app.config sur Settings.settings , et vice versa?
  • que se passe-t-il si mon application utilise Settings.settings et que je change une valeur dans app.config après qu'elle ait été déployée? Aucune syncronisation de Settings.settings ne peut se produire puisqu'il a déjà été compilé et distribué.

Note. J'ai cherché des questions sur ce sujet, mais je suis encore plus confus. Par exemple, les réponses à cette question ici sont tout à fait contradictoires et n'apportent pas beaucoup de lumière.

Note 2. Je suis conscient que app.config est un nom de fichier design-time, et je suis familier avec la dynamique de Visual Studio copiant et renommant vers le dossier exécutable.

74
demandé sur Community 2011-09-17 20:41:52

2 réponses

du point de vue D'un .net Framework (sans parler des outils - Visual Studio - pour le moment), historiquement, il n'y avait que [app.exe].config (en fait, C'est ce que L'AppDomain définit comme le fichier de configuration. Le nom est défini par le nom D'Appdomaine, c'est pourquoi il est web.config pour les applications web...) et machine.config . application est déployée avec la demande, la "machine" est pour l'ensemble de la machine. Ils étaient censés être "très" en lecture seule pour l'utilisateur moyen. Il est possible de changer eux, mais il n'était pas l'idée.

mais comment puis-je sauvegarder les préférences de l'utilisateur final? C'est pourquoi [l'utilisateur].config a été présenté (je crois avec .NET 2). La documentation officielle dit ceci:

le système de configuration qui a été initialement publié avec le .NET Le cadre supporte la fourniture de données de configuration d'applications statiques par la machine de l'ordinateur local.fichier de configuration ou dans un App.EXE.fichier de configuration que vous déployez avec votre candidature. Le La classe LocalFileSettingsProvider étend ce support natif

1) les paramètres d'application peuvent être stockés dans l'une ou l'autre des machines.config ou de l'application.EXE.les fichiers de configuration. Machine.la config est toujours en lecture seule, alors que App.EXE.config est limité par des considérations de sécurité à la lecture seule pour la plupart des applications.

2) les paramètres définis par L'utilisateur peuvent être stockés dans app.EXE.fichiers de configuration, dans lesquels le cas où ils sont traités comme des défauts statiques.

3) les paramètres par défaut de portée utilisateur sont stockés dans un nouveau fichier, utilisateur.config, où utilisateur est le nom d'utilisateur de la personne actuellement l'exécution de l'application. Vous pouvez spécifier une valeur par défaut pour un utilisateur dont l'étendue réglage avec DefaultSettingValueAttribute. Parce que l'utilisateur l'étendue du les paramètres changent souvent pendant l'exécution de l'application, utilisateur.la config est toujours en lecture/écriture.

donc à partir D'un. NET Framework point de vue, il n'y a qu'un mécanisme à 3 couches.

maintenant, Visual Studio essaie juste de vous aider en générant le code de sécurité pour les paramètres de lecture/écriture finaux. La plupart du temps, que [utilisateur].le fichier de configuration n'existe pas et une valeur de paramètre sera définie par ce qui est dans le DefaultSettingValueAttribute (défini pour chaque paramètre), ou utiliser ce qui a été défini statiquement dans l'application.config. C'est pourquoi Visual Studio met également à jour l'application.fichier de configuration pour que vous puissiez définir les paramètres statiques par défaut. Mais vous pouvez parfaitement supprimer toute cette application.des trucs de config.

24
répondu Simon Mourier 2012-10-25 16:21:49

pourquoi deux mécanismes et pas un seul?

ils servent à des fins différentes. L'API paramètres offre un accès en lecture / écriture à partir de l'application, tandis que config est en lecture seule (sauf si vous écrivez le fichier en code).

Les paramètres

peuvent être définis par utilisateur ou par application, et sont conçus pour être volatiles. Les paramètres de l'utilisateur sont écrits dans le dossier caché dans le stockage du profil de L'utilisateur qui est autorisé en vertu de l'UAC.

App.config est par application seulement. Modifications à App.la configuration n'est pas automatiquement détectée. Il nécessite un redémarrage ou un code pour rafraîchir les valeurs. Sous UAC les utilisateurs ne sont pas autorisés à écrire dans les répertoires d'application tels que les fichiers de programme, donc ce fichier devrait être considéré statique en lecture seule.

Quels sont les scénarios les plus courants pour utiliser app.config plus Paramètre.paramètres, et vice versa?

vous pouvez utiliser des paramètres dans une application de bureau pour stocker les préférences de l'utilisateur, ou des paramètres qui changent à l'exécution.

vous utiliseriez App.config pour plus générique paramètres statiques, comme les chaînes de connexion, etc, ou pour définir la configuration des composants utilisés dans votre application.

que se passe-t-il si mon application utilise des paramètres.paramètres et je change un valeur en app.config après c'est été déployé?

si l'application est redéployée, alors elle récupérera les nouveaux paramètres, à moins qu'il n'y ait déjà des personnalisations utilisateur/application sur la machine, auquel cas elle continuera à les utiliser, à moins que vous ne les effaciez.

si vous ajoutez de nouveaux paramètres, ceux-ci seront repris. En fait, les valeurs par défaut sont cuites dans la classe Settings, donc même si l'application.config est vide les paramètres fonctionnent encore.

42
répondu TheCodeKing 2011-09-20 22:28:03